【发布时间】:2011-04-11 02:34:28
【问题描述】:
我一直在阅读,发现使用 LIKE 会大大降低查询速度。
一位同事推荐我们使用
Select Name
From mytable
a.Name IN (SELECT Name
FROM mytable
WHERE Name LIKE '%' + ISNULL(@Name, N'') + '%'
GROUP BY Name)
代替
Select Name
From mytable
a.Name LIKE '%' + ISNULL(@Name, N'') + '%'
现在我不是 SQL 专家,我并不真正了解这些语句的内部工作原理。这是一个更好的选择,值得为每个 like 语句输入一些额外的字符吗?有没有更好(更容易输入)的替代方法?
【问题讨论】:
-
我无法想象这有什么不同。与往常一样,您应该为您的数据库使用查询计划器,并让它准确地告诉您它将如何运行查询。但是,除非该列上有某种全文索引,否则无法优化您的
like子句最终是正确的,即使维护起来也很昂贵。基本上,没有免费的午餐。 -
你上面的声明中的
IIQR是什么?那是一张小桌子吗?还有你用的是什么关系型数据库? -
你的表现的杀手锏是你进行了
LIKE %(term)%搜索。这基本上使所有索引都无用 - 你几乎可以保证获得全表扫描。如果可以的话,尝试使用类似LIKE (term)%(没有前导%)的东西——这将允许SQL Server使用索引——或者使用全文搜索,如果你真的必须搜索任意词 -
有些查询绝对需要放置前导 %。任意术语是什么意思?
标签: sql sql-server tsql sql-like