mysql 面試準備02


參考Java 開發手冊

1.常用的mysql函數

聚合函數:avg,sum,min,max,count
字符串: concat,format,replace,substr
日期: date,date_format,UNIX_TIMESTAMP(時間戳)

2.建表規約

  1. 遵守三大範式
  2. 不要用保留字段
  3. 適當的冗餘字段,提高查詢效率
  4. 表名字段名全用小寫,因爲linux區分大小寫
  5. 如果存儲的字符串長度幾乎相同,那麼可以用char
  6. 表必備三字段:id, create_time, update_time

3.索引

  1. 分爲普通索引、唯一索引、主鍵索引、全文索引
    唯一索引與主鍵索引的區別在於,唯一索引可以爲空。

4.索引規約

  1. 唯一特性的表字段,都必須要建立索引
  2. 超過三個表禁止join
  3. sql優化,至少要是range < ref < consts

5.SQL 語句

  1. 不要用count(列名)代替count(*),count(列名)會忽略空值得行。
  2. 禁止使用存儲過程,存儲過程難以調試和擴展,更沒有移植性
  3. 不得使用外鍵與級聯,一切外鍵概念必須在應用層解決。

6.ORM 映射

  1. 不使用*去查詢,去增加解析成本
  2. #{},#param# 不要使用${} 此種方式容易出現 SQL 注入
  3. 獲取新增後的行id:useGeneratedKeys=true, keyProperty=id

7.查詢慢,sql優化經驗、提高查詢效率

  1. 可以建立索引
  2. 通過redis來緩存數據到內存裏
  3. 單表容量超過2G的話,可以採取分表分庫
  4. 還可以採用讀寫分離
  5. 不使用count(*)
  6. 用exists代替in

8.什麼時候索引會失效

https://blog.csdn.net/u011277123/article/details/78904569

  • 模糊查詢,如果前面帶了美元%,不使用索引,後面帶了%可以使用索引
  • or 也不會使用索引,用union all替代
  • 使用組合索引時,必須要包括第一個列,否則也會失效
  • 字符串存的數字,數字也要加引號,否則索引也會失效
  • 字段加運算符也不會使用索引

9.explain

在這裏插入圖片描述
查看select語句的執行效率,需要關注,table,type,possible_keys,key,rows,extra

  • type:
    all<index<range < ref < consts
    all : 遍歷全表,相當於沒有使用索引,
    index:索引物理文件全掃描,速度非常慢
    range: 範圍內索引
    ref: 普通索引
    consts:最多匹配一行(主鍵或唯一索引)

  • Extra:備註

  • rows:
    需要查詢的行數,並不是查詢出來的行數
    在這裏插入圖片描述
    在這裏插入圖片描述

10.mysql調優

  1. 選擇合適的存儲引擎
  2. 建立對應的索引,優化sql
  3. 開啓mysql查詢緩存,默認是關閉的,需要手動打開query_cache_type。
  4. 分表分庫,讀寫分離

11. mysql存儲引擎

12. mysql樂觀鎖與悲觀鎖

樂觀鎖: 認爲不會有人改數據,通過新增了一個字段version版本號來解決的。
悲觀鎖: 認爲會有人改數據,數據庫加for update。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章