減少查詢的次數,對應在主鍵索引上只搜尋一次第一
阿新 • • 發佈:2020-07-06
假設在 user 表中存在[email protected]
,[email protected]
,[email protected]
, 三條記錄。
有這樣一條語句select id,name,email from SUser where email='[email protected]';
使用 index1 索引時,流程如下:
- 在 index1 中,找到名字是
[email protected]
的記錄,獲取 ID. - 在主鍵索引上對應 ID的行,判斷 email 是否正確,將記錄加入結果集。
- 接著取 index1 索引的下一條記錄,發現不滿足 email 格式,結束迴圈。
使用 index2 索引:
- 在 index2 中,找到名字是
zhangs
的記錄,獲取 ID. - 在主鍵索引上對應 ID的行,這時拿到的是
[email protected]
的行, 發現不符合,丟棄。 - 接著在 index2 迴圈,拿到下一條記錄 ID。
- 在主鍵索引上對應 ID的行,這時拿到的是
[email protected]
的行, 發現不符合,丟棄。 - 接著在 index2 迴圈,拿到下一條記錄 ID。
- 在主鍵索引上對應 ID的行,這時拿到的是
[email protected]
的行, 發現符合,納入結果集。 - 接著在 index2 迴圈,發現記錄格式不符合,結束迴圈。
看這個過程,很容易發現,字首索引會增加查詢語句讀取資料的次數。
但如果將字首索引的 email(6) 改成 email(7),就會減少查詢的次數,對應在主鍵索引上只搜尋一次。這就說明,如果能合適的設定字首索引的長度,就能在空間和效率上取得平衡。