加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 全文搜索vs LIKE

发布时间:2020-12-12 06:57:03 所属栏目:MsSql教程 来源:网络整理
导读:我的问题是关于使用全文。我知道像以%从不使用索引开头的查询: SELECT * from customer where name like %username% 如果我使用全文本这个查询可以采取更好的性能?对于像%username%这样的查询,SQL Server可以使用全文索引的优点吗? 解决方法 简短答案
我的问题是关于使用全文。我知道像以%从不使用索引开头的查询:
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%';

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读