尝试使以下查询整洁并且运行得更快。任何见解都有帮助。我必须像操作员一样使用,因为需要在现场的任何地方搜索模式。
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
答案 0 :(得分:1)
基本上,您无法使用基本SQL优化此查询。如果您要搜索的字符串是文本中的单词,则可以使用全文字符串。开始学习这个的地方是documentation。
如果您碰巧知道将要搜索这四个字符串,则可以设置计算列,然后在计算列上构建索引。那会很快。但是你将被限制在那些字符串中。
一切都不会丢失。从技术上讲,还有其他解决方案,例如基于n-gram或转换为XML / JSON并对其进行索引的解决方案。但是,这些要么在SQL Server中不受支持,要么在实现时不重要。
答案 1 :(得分:0)
您可以使用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'