面試寶典系列-mysql性能優化方案

面試寶典系列-mysql性能優化方案

表結構優化:

1、根據自己的業務選擇合適的引擎

2、表設計時儘量符合第三範式

  • 第一範式:表的列的具有原子性,不可再分解,即列的信息,不能分解, 只有數據庫是關係型數據庫就自動的滿足。
  • 第二範式:表中的記錄是唯一的, 就滿足第二範式, 通常我們設計一個主鍵來實現
  • 第三範式:表中不要有冗餘數據, 即表的信息,如果能夠被推導出來,就不應該單獨的設計一個字段來存放.

為什麼說盡量符合? 因為有些系統為了提高運行效率,就必須降低範式標準,適當保留冗餘數據。

3、表的字段儘可能使用NOT NULL

4、如果知道字符串固定長度,那麼就用char型,不要用varchar型

5、主從分離,讀從庫,寫主庫

6、當表的字段過多時,進行垂直分割;如果數據過多時,進行水平分割

sql優化:

1、不使用Select *,只查詢需要的字段,查詢所有佔用內存

2、多表連接時,儘量小表驅動大表,即小表 join 大表

3、插入多條數據時,儘量組合成一天sql批量插入

4、使用存儲過程

5、使用枚舉或整數代替字符串類型

6、開啟慢查詢,對慢sql使用explain或desc進行性能分析,並優化sql

索引優化:

  1. 索引並不是越多越好,要根據查詢有針對性的創建,考慮在WHERE和ORDER BY命令上涉及的列建立索引,可根據EXPLAIN來查看是否用了索引還是全表掃描
  2. 應儘量避免在WHERE子句中對字段進行NULL值判斷,否則將導致引擎放棄使用索引而進行全表掃描
  3. 值分佈很稀少的字段不適合建索引,例如"性別"這種只有兩三個值的字段
  4. 字符字段只建前綴索引
  5. 字符字段最好不要做主鍵
  6. 不用外鍵,由程序保證約束
  7. 儘量不用UNIQUE,由程序保證約束
  8. 使用多列索引時主意順序和查詢條件保持一致,同時刪除不必要的單列索引(最左匹配原則)


分享到:


相關文章: