添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

今天在查找 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,大家可以自行測試看看。

  • 1、CHARINDEX
  • 2、SqlServer之like、charindex、patindex區別及性能分析
  •