1. 程式人生 > 實用技巧 >mysql優化查詢之索引

mysql優化查詢之索引

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.對索引使用函式計算,索引直接失效