本文
今天在查找 SQL 效能 Like 會引起吃不到索引的情況忽然學會一招,一定要趕快紀錄一下。
在處理模糊搜尋的條件常常會使用 LIKE’%關鍵字%’ 這種做法,但 SQL 的索引在 LIKE’%關鍵字’ 的情況會失效,更不用說使用 LIKE’%關鍵字%’ 當資料一大效能真的是非常差。
這裡介紹一個替代使用語法 CHARINDEX
。
首先我們先看一下MSDN介紹用法。
這裡可以知道 charindex 其實是可以用來計算兩個字元間有多少相同的地方。
現在來測試一下
SELECT CHARINDEX('a',' apple is apple')
結果:
或是可以用來判斷相同的字元出現的位子。
SELECT CHARINDEX('a','appleisapple',5)
結果:
這邊第三個參數5是從第五個字元開始往後搜尋。
所以如果改成0結果就會是
SELECT CHARINDEX('a','appleisapple',0)
結果:
替代 LIKE 的方式
好了說了這麼多到底要怎麼替代 LIKE 呢?
可以使用這種方式替代
CHARINDEX('模糊搜尋關鍵字', 要搜尋的資料行) > 0
實際測試,使用NorthWind Product Table
SELECT *
FROM [Northwind].[dbo].[Products]
where CHARINDEX('a',ProductName) > 0
使用CHARINDEX結果:
SELECT *
FROM [Northwind].[dbo].[Products]
where ProductName LIKE '%a%'
使用 LIKE 結果:
哪種方式比較好?
因為在家裡沒有這麼大量的資料做測試,在公司的時候實際測試,如果再沒有吃到索引的情況下 CHARINDEX 會比 LIKE 還要快,但如果有吃到索引 LIKE 的速度還是優於 CHARINDEX 的。
所以如果在非得需要進行 LIKE’%關鍵字%’ 搜尋資料時,沒辦法吃到索引,就可以使用 CHARINDEX 來替代 LIKE,大家可以自行測試看看。