【发布时间】:2013-11-27 20:39:08
【问题描述】:
我可以在查询中使用什么来代替 LIKE? 因为 LIKE 对搜索条件的性能影响很差。
我的场景:
SELECT
*
FROM
MetaDataTag
WHERE
Name LIKE 'SUN RCC%'
我不能使用包含作为表格上的全文索引,我没有选择。
建议会很有帮助。
【问题讨论】:
-
为什么不在某些列上然后在整个表上使用 like ?
(select *) ?这需要时间 -
另一个选项是使用
CHARINDEX(参见:technet.microsoft.com/en-us/library/ms186323.aspx),如果返回值大于0,则它存在于字符串中。不幸的是,CHARINDEX('123','1')和CHARINDEX('123','5')都返回 0,它不能完全确定包含的字符串是开始还是不存在。您可以通过为要比较的字符串添加前缀来解决此问题,但我个人认为在这种情况下LIKE是一个合理的解决方案。 -
另一种选择是查看
LEFT(str)的内容(参见:stackoverflow.com/questions/9493844/…) -
你是说它在这个特定查询上的性能很差,还是你要建议
LIKE总体上性能很差?如果是后者,那根本就不是真的;假设您有一个支持在 Name 列上搜索的索引,优化器可以使用该索引来满足您的查询,因为您在模式的开头没有通配符。如果是前者,请检查以确保您的查询具有覆盖索引。
标签: sql sql-server tsql database-performance sql-like