1、索引失效
1.1 基本原則
- 全值匹配我最愛
- 最佳左前綴法則,對於多列索引,查詢從最左前列開始,不跳過索引中的列
- 不在索引列上做任何操作,計算、函數、自動/手動類型轉換),否則會導致索引失效導致全表掃描
- 存儲引擎不能使用索引中範圍條件右邊的列
- 儘量使用覆蓋索引(只訪問索引的查詢(索引列和查詢列一致)),減少select *
- mysql在使用不等於(!=或者<>)的時候無法使用索引
- is null,is not null也無法使用索引
- like 以通配符開頭(‘%abc…’)mysql索引失效會變成全表掃描的操作,如果非要使用’%…%'類型,可以採用索引覆蓋,這樣不會掃描全表,可以使用到索引
- 字符串不加單引號索引失效
- 少用or,用它來連接時會索引失效
2、慢查詢日誌
通過set slow_query_log=1 和slow_query_log_file=…file,開啓慢查詢後,可以通過設置long_query_time來指定慢查詢閾值,找到那些查詢比較慢的SQL進行分析
3、profiling
一般來說,通過觀察、構建索引以及explain分析之後的能滿足大多數的優化條件,但是,有些時候也需要服務器做一些調整,比如對於那些無法構建索引的,可以適當調整join buffer的大小。
當然通過set profiling=1開啓之後,可看到所有的SQL語句都會被記錄到profiles中,然後對於每一條SQL,通過select * from query id 可以看到該查詢的詳細資源使用情況然後做出相應的分析
4、普通日誌
通過開啓general_log=1,也是可以看到每一條SQL的執行,然後記錄到mysql.general_log表中,生產環境一般不建議這樣用