按照查詢條件順序來建立索引(規律的索引順序),從左到右建立順序。
例如 當查詢條件有col2 = ?
以及 col1 = ? 和 col2 = ?
,這種情況下建立 複合索引 時,要將col2欄位宣告在索引欄位前面會比較合適,像index_name(col2, col1)
;若查詢條件有col1 = ?
以及 col2 = ?
以及 col1 = ? 和 col2 = ?
,那就可以選擇建立兩個索引,col1和col2建立 複合索引,col2再 單獨 建立一個索引,遵循 複合索引 規則條件下,將一些索引進行合併,減少索引的數量。
1.對索引欄位進行計算,或使用了函數。 若查詢條件在where子句進行計算的公式盡量在 = 的右邊。
2.查詢中的資料型態與欄位型態不一致時,隱式類型轉換也會導致索引失效。
3.違反索引的最左前綴(最左匹配)原則
4.全表掃描更快。優化器評估找到目標索引後,還要評估要遍歷的索引數與全表總筆數的比例,若比例較高,優化器就可能考慮全表掃描
對於較長的字串,例如email地址,可以只針對字串的前面一部分字符建立索引,就已經接近整個字串資料的不同值的比例,也就是說用前綴字串資料就差不多能替代整個字串了,替代的比例高達95%以上。
前綴索引可以達到節省儲存空間,也不會對查詢性能產生明顯的影響。 不過,前綴索引無法利用覆蓋索引優化技術,無法實現唯一性。
MSSQL、MySQL底層使用的資料結構(B+ Tree)