bal*_*hmi 4 sql t-sql sql-server
我听说由于性能原因,不建议在SQL Server的LIKE子句的开头使用%.为什么会这样?
有关此问题的更多详细信息将有助于我了解此问题的影响.
为什么喜欢'%......'不好?你不能使用任何索引,必须扫描整个表.
这是一个很好的例子:
转到电话簿,找到符合'%ch'的所有名字.这将花费很长时间,因为您无法使用聚集索引,并且必须扫描整本书!
鉴于数据'abcdefg'
WHERE Column1 LIKE '%cde%' --can't use an index
WHERE Column1 LIKE 'abc%' --can use and index
WHERE Column1 Like '%defg' --can't use an index, but see note below
Run Code Online (Sandbox Code Playgroud)
注意:如果您有需要'%defg'的重要查询,则可以使用持久计算列来REVERSE()列,然后对其进行索引.然后你可以查询:
WHERE Column1Reverse Like REVERSE('defg')+'%' --can use the persistent computed column's index
Run Code Online (Sandbox Code Playgroud)
要添加一个持久的计算列(反转字符串)并对其进行索引,请使用以下代码:
ALTER TABLE YourTable ADD ReversedYourString AS REVERSE(YourString) PERSISTED
CREATE NONCLUSTERED INDEX IX_YourTable_ReversedYourString
ON YourTable (ReversedYourString)
Run Code Online (Sandbox Code Playgroud)