資料庫索引 之 性能優化

By sunwc 2023-04-17 SQL

最左前綴(最左匹配) 原則:

按照查詢條件順序來建立索引(規律的索引順序),從左到右建立順序。 例如 當查詢條件有col2 = ? 以及 col1 = ? 和 col2 = ?,這種情況下建立 複合索引 時,要將col2欄位宣告在索引欄位前面會比較合適,像index_name(col2, col1);若查詢條件有col1 = ? 以及 col2 = ? 以及 col1 = ? 和 col2 = ?,那就可以選擇建立兩個索引,col1和col2建立 複合索引,col2再 單獨 建立一個索引,遵循 複合索引 規則條件下,將一些索引進行合併,減少索引的數量。

參考來源


索引失效的場景(進行了全表掃描)

1.對索引欄位進行計算,或使用了函數。 若查詢條件在where子句進行計算的公式盡量在 = 的右邊。

2.查詢中的資料型態與欄位型態不一致時,隱式類型轉換也會導致索引失效。

3.違反索引的最左前綴(最左匹配)原則

4.全表掃描更快。優化器評估找到目標索引後,還要評估要遍歷的索引數與全表總筆數的比例,若比例較高,優化器就可能考慮全表掃描

參考來源


字串型態欄位如何建立索引

對於較長的字串,例如email地址,可以只針對字串的前面一部分字符建立索引,就已經接近整個字串資料的不同值的比例,也就是說用前綴字串資料就差不多能替代整個字串了,替代的比例高達95%以上。

前綴索引可以達到節省儲存空間,也不會對查詢性能產生明顯的影響。 不過,前綴索引無法利用覆蓋索引優化技術,無法實現唯一性。

參考來源


資料庫性能優化目的與方式

  • 目的:主要目標就是減少掃描(訪問)硬碟的機率。
  • 方式:
    • 使用記憶體緩存,將會頻繁地存取的資料放在記憶體
    • 索引SQL優化

MSSQL、MySQL底層使用的資料結構(B+ Tree)

  • 叢集索引
  • 非叢集索引

參考來源

資料結構參考網站