1. 程式人生 > 實用技巧 >減少查詢的次數,對應在主鍵索引上只搜尋一次第一

減少查詢的次數,對應在主鍵索引上只搜尋一次第一

假設在 user 表中存在[email protected],[email protected],[email protected], 三條記錄。

有這樣一條語句select id,name,email from SUser where email='[email protected]';

使用 index1 索引時,流程如下:

  1. 在 index1 中,找到名字是[email protected]的記錄,獲取 ID.
  2. 在主鍵索引上對應 ID的行,判斷 email 是否正確,將記錄加入結果集。
  3. 接著取 index1 索引的下一條記錄,發現不滿足 email 格式,結束迴圈。

使用 index2 索引:

  1. 在 index2 中,找到名字是zhangs的記錄,獲取 ID.
  2. 在主鍵索引上對應 ID的行,這時拿到的是[email protected]的行, 發現不符合,丟棄。
  3. 接著在 index2 迴圈,拿到下一條記錄 ID。
  4. 在主鍵索引上對應 ID的行,這時拿到的是[email protected]的行, 發現不符合,丟棄。
  5. 接著在 index2 迴圈,拿到下一條記錄 ID。
  6. 在主鍵索引上對應 ID的行,這時拿到的是[email protected]的行, 發現符合,納入結果集。
  7. 接著在 index2 迴圈,發現記錄格式不符合,結束迴圈。

看這個過程,很容易發現,字首索引會增加查詢語句讀取資料的次數。

但如果將字首索引的 email(6) 改成 email(7),就會減少查詢的次數,對應在主鍵索引上只搜尋一次。這就說明,如果能合適的設定字首索引的長度,就能在空間和效率上取得平衡。