嗨嗨,昨天有提到 SARGAble ,這是 Search ARGument ABLE 的縮寫,意思是「可以用索引尋找」(維基百科: Sargable)。可用於描述一個查詢是否符合此條件。
如果一個查詢不符合 SARGAble 的話,那麼查詢效率可能會變差。
因此,要改善查詢效率的話,通常會先檢查查詢的條件是否符合 SARGAble,以有效的利用索引。
SARGAble 運算子如下:
<, >, >=, <=, >=, BETWEEN, LIKE, IS [NOT] NULL, IN
效果不那麼好的運算子:
<>, NOT, NOT IN, NOT LIKE ...
這些運算子使用時,可能導致掃描整個索引,效率和掃描整個資料表沒有差異太多。
以下則是完全不符合 SARGAble 的狀況。
WHERE name LIKE '%Alice%'
: 只在字串後面加入 %
的話,仍然能有效利用索引,在前面或前後加入 %
,則無法有效利用索引。WHERE SQRT(length) = 5.0
使用了函數,沒有辦法利用索引。WHERE First + Last = Fullname
需要計算的條件,沒辦法利用索引。