在SQL查询中避免LIKE运算符

时间:2013-12-03 12:51:09

标签: sql tsql full-text-search database-performance sql-like

还有其他方法可以编写查询以避免使用“LIKE”运算符,因为LIKE使用会影响搜索大量数据时的性能。

我的表:

Products
--------
Id int
ProductName NVARCHAR(255)

Qry:搜索包含“EBS”字样的产品

select * from Products where name like 'EBS%'

全文索引放在Products表中。对于少数产品,我无法通过全文索引从PRODUCTS表中检索数据。

select *
from Products 
WHERE contains(ProductName,@Contains)
Order by    MT.Name 

- 上述qry没有结果 从名为'EBS%'的名称的产品中选择*(性能不佳) 所以还有其他方法可以实现这一点。

3 个答案:

答案 0 :(得分:0)

阅读本文,它解释了如何使用全文搜索以及您可以使用的查询类型

TECHNET Microsoft FTS Explained

答案 1 :(得分:0)

全文可以使用完整的单词(标记),或者最好使用前缀标记,但不能使用任意部分匹配。对于“包含任意字符串”,没有解决方法,只使用LIKE进行慢速扫描。通常,解决方案是转向需求利益相关者并推迟不合理的需求。

答案 2 :(得分:0)

您可以在name字段上构建常规索引。当模式以常量字符串开头时,SQL Server将使用索引。

所以,这将使用索引:

select *
from Products
where name like 'EBS%';

这不会:

select *
from Products
where name like '%EBS%';