mysql優化查詢之索引
阿新 • • 發佈:2020-12-15
explain sql內容 生成執行計劃
重點關注的結果列
select_type = all,代表全表掃描,後面的內容不用看。
key = null,代表沒有使用索引
rows顯示掃描行數,數值越大,掃描行數越多,耗時越長。(行數值並不完全精確)
extra列 出現 Using filesort / Using temporary ,都是很影響資料庫效能的。
優化思路
1.表的資料型別設計是否合理,遵循資料型別選取越簡單越小原則
2.整理表的碎片
3.explain查詢執行計劃,輔助優化SQL語句
4.正確的索引優化
索引的選擇
1.經常被查詢的列
2.經常用於表連線的列
3.經常排序分組的列
tips:假如想要選取name作為索引,先看一下表中name的值分佈情況
select count(distinct name)/count(*) from talbe_name;
查詢結果值越大,代表重複值很少,選擇性更高,非常適合建立索引
索引總結
優點:
1.提高資料的檢索效率
2.提高聚合函式的效率
3.提高排序的效率
4.使用覆蓋索引可以避免回表查詢
索引的禁忌:
1.選擇性地的欄位不要建立索引
2.很少查詢的列不要建立索引
3.大資料型別列不要建立索引
4.不要使用NULL指定列的屬性,最好為NOT NULL,然後用空字串代替空值
索引失效的情況:
1.索引掃描的行記錄超過全表30%,優化器不會走索引,而是全表掃描
2.聯合索引中,第一個查詢條件不是最左索引列
3.聯合索引中,第一個查詢條件使用範圍查詢(<,=,<=,between),只能使用到部分索引,有ICP出現
4.模糊查詢以%開頭
5.兩個單列索引,一個用於檢索,一個用於排序。這種情況只會用到一個索引。因為查詢語句最多隻能使用一個索引,考慮建立聯合索引。
6.對索引使用函式計算,索引直接失效