[英]Optimize SQL Query containing Like Operator
尝试使以下查询更整洁并运行得更快。 任何见解都是有帮助的。 我需要使用类似Operator的方法,因为需要在字段中的任何位置搜索模式。
Select Col1,Col2,Col3 from TableName where
(Subject like '%Maths%' OR
Subject like '%Physics%' OR
Subject like '%Chemistry%' OR
Subject like '%English%')
AND
(Description like '%Maths%' OR
Description like '%Physics%' OR
Description like '%Chemistry%' OR
DESCRIPTION like '%English%')
AND
(Extra like '%Maths%' OR
Extra like '%Physics%' OR
Extra like '%Chemistry%' OR
Extra like '%English%') AND Created Date > 2017-01-01
基本上,您无法使用基本SQL优化此查询。 如果要搜索的字符串是文本中的单词 ,则可以使用全文字符串。 开始学习此内容的地方是文档 。
如果您碰巧知道要搜索这四个字符串,则可以设置计算列,然后在计算列上建立索引。 那会很快。 但是您将仅限于那些字符串。
一切都不会丢失。 从技术上讲,还有其他解决方案,例如基于n-gram或通过转换为XML / JSON并对其进行索引的解决方案。 但是,这些不是SQL Server中不支持的,还是不容易实现的。
您可以使用CTE
和charindex
尝试此操作
比较您的OP的执行计划。
;with mycte as ( --- building words to look for
select * from
(values ('English'),
('Math'),
('Physics'),
('English'),
('Chemistry')
) t (words)
)
select t.* from
tablename t
inner join mycte c
on charindex(c.words,t.subject) > 0 --- check if there is a match
and charindex(c.words,t.description) > 0 --- check if there is a match
and charindex(c.words,t.extra) > 0 --- check if there is a match
where
t.createddate > '2017-01-01'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.