sql-server – 全文搜索vs LIKE

前端之家收集整理的这篇文章主要介绍了sql-server – 全文搜索vs LIKE前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题是关于使用全文。我知道像以%从不使用索引开头的查询
SELECT * from customer where name like %username%

如果我使用全文本这个查询可以采取更好的性能?对于像%username%这样的查询sql Server可以使用全文索引的优点吗?

解决方法

简短答案

没有有效的方式在sql Server中执行中缀搜索,也不在索引列上使用LIKE或使用全文索引。

长答案

在一般情况下,没有相当于LIKE运算符的全文。虽然LIKE适用于一串字符,并且可以对目标内的任何内容执行任意通配符匹配,但设计全文只对整个字词/术语进行操作。 (这是一个简单的一点,但是为了这个答案的目的)

sql Server全文确实支持LIKE的子集与前缀术语运算符。从文档(http://msdn.microsoft.com/en-us/library/ms187787.aspx):

SELECT Name
FROM Production.Product
WHERE CONTAINS(Name,' "Chain*" ');

将返回产品名为“链锯”,“链式邮件”等。在功能上,这并不会让您在标准的LIKE操作符(LIKE’Chain%’)中获得任何东西,只要列被索引,使用LIKE作为前缀搜索应该可以接受性能

LIKE运算符允许您将通配符放在任何位置,例如LIKE’%chain’,正如您所提到的那样,可以防止使用索引。但是使用全文,星号只能出现在查询字词的末尾,所以这对你没有帮助。

使用LIKE,可以通过创建一个新列来执行有效的后缀搜索,将其值设置为相反的目标列,并对其进行索引。然后可以查询如下:

SELECT Name
FROM Production.Product
WHERE Name_Reversed LIKE 'niahc%'; /* "chain" backwards */

它返回的产品名称以“chain”结尾。

我想你可以组合前缀和反向后缀hack:

SELECT Name
FROM Production.Product
WHERE Name LIKE 'chain%'
AND Name_Reversed LIKE 'niahc%';

它实现了一个(潜在的)索引的中缀搜索,但它并不特别漂亮(我从来没有测试过这个,以查看查询优化器是否甚至在其计划中使用这两个索引)。

猜你在找的MsSQL相关文章