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

表結構優化:sql

一、根據本身的業務選擇合適的引擎數據庫

二、表設計時儘可能符合第三範式性能

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

爲何說盡可能符合?  由於有些系統爲了提升運行效率,就必須下降範式標準,適當保留冗餘數據。優化

三、表的字段儘量使用NOT NULL設計

四、若是知道字符串固定長度,那麼就用char型,不要用varchar型索引

五、主從分離,讀從庫,寫主庫內存

六、當表的字段過多時,進行垂直分割;若是數據過多時,進行水平分割字符串

sql優化:性能分析

一、不使用Select *,只查詢須要的字段,查詢全部佔用內存效率

二、多表鏈接時,儘可能小表驅動大表,即小表 join 大表

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

四、使用存儲過程

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

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

索引優化:

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

 

相關文章
相關標籤/搜索