还有其他方法可以编写查询以避免使用“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%'的名称的产品中选择*(性能不佳) 所以还有其他方法可以实现这一点。
答案 0 :(得分:0)
阅读本文,它解释了如何使用全文搜索以及您可以使用的查询类型
答案 1 :(得分:0)
全文可以使用完整的单词(标记),或者最好使用前缀标记,但不能使用任意部分匹配。对于“包含任意字符串”,没有解决方法,只使用LIKE
进行慢速扫描。通常,解决方案是转向需求利益相关者并推迟不合理的需求。
答案 2 :(得分:0)
您可以在name
字段上构建常规索引。当模式以常量字符串开头时,SQL Server将使用索引。
所以,这将使用索引:
select *
from Products
where name like 'EBS%';
这不会:
select *
from Products
where name like '%EBS%';