gpt4 book ai didi

sql - 全文搜索与 LIKE

转载 作者:行者123 更新时间:2023-12-02 01:13:51 25 4
gpt4 key购买 nike

我的问题是关于使用全文搜索。据我所知like以 % 开头的查询从不使用索引:

SELECT * from customer where name like %username%

如果我对此查询使用全文,可以获得更好的性能吗? SQL Server 能否利用全文索引优势进行查询如 %username%

最佳答案

简短回答

在 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”结尾的产品。

我想你可以将前缀和反向后缀黑客结合起来:

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

它实现了(可能)索引中缀搜索,但它不是特别漂亮(而且我从未测试过它以查看查询优化器是否会在其计划中使用这两个索引)。

关于sql - 全文搜索与 LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com