1、測試表
2、最佳實戰
2.1、全值比對
2.2、最左字首法則
2.3、不在索引列上做任何操作(計算、函數、(自動or手動)類型轉換),會導緻索引失效而轉向全表掃描
2.4、存儲引擎不能使用索引中範圍條件右邊的列
2.5、盡量使用覆寫索引(隻通路索引的查詢(索引列包含查詢列)),減少 select * 語句
2.6、mysql在使用不等于(!=或者<>),not in ,not exists 的時候無法使用索引會導緻全表掃描< 小于、 > 大于、 <=、>= 這些,mysql内部優化器會根據檢索比例、表大小等多個因素整體評估是否使用索引
2.7、is null,is not null 一般情況下也無法使用索引
2.8、like以通配符開頭('$abc...')mysql索引失效會變成全表掃描操作
2.9、字元串不加單引号索引失效
2.10、少用or或in,用它查詢時,mysql不一定使用索引,mysql内部優化器會根據檢索比例、表大小等多個因素整體評估是否使用索引,詳見範圍查詢優化
2.11、範圍查詢優化
3、總結
如果索引了多列,要遵守最左字首法則。指的是查詢從索引的最左前列開始并且不跳過索引中的列
我們可以發現,隻有第一個可以打到索引上
給hire_time增加一個普通索引:
轉化為日期範圍查詢,有可能會走索引:
還原最初索引狀态
問題:解決like’%字元串%'索引不被使用的方法?
a)使用覆寫索引,查詢字段必須是建立覆寫索引字段
b)如果不能使用覆寫索引則可能需要借助搜尋引擎
給年齡添加單值索引
沒走索引原因:mysql内部優化器會根據檢索比例、表大小等多個因素整體評估是否使用索引。比如這個例子,可能是由于單次資料量查詢過大導緻優化器最終選擇不走索引
優化方法:可以将大的範圍拆分成多個小範圍
like kk%相當于=常量,%kk和%kk% 相當于範圍
‐‐ mysql5.7關閉only_full_group_by報錯