全文搜索与LIKE

我的问题是关于使用全文。我知道像以%开头的查询从不使用索引:
SELECT * from customer where name like %username%
如果我使用全文来进行此查询可以ı采取更好的性能? SQL Server是否可以为%username%等查询使用全文索引优势?     
已邀请:
简短的回答 没有有效的方法在SQL Server中执行中缀搜索,既不在索引列上使用
LIKE
,也不使用全文索引。 答案很长 在一般情况下,没有与LIKE运算符等效的全文。虽然LIKE可以处理一串字符,并且可以对目标内的任何内容执行任意通配符匹配,但是设计全文仅对整个单词/术语进行操作。 (这是一个轻微的简化,但它会为了这个答案的目的。) SQL Server全文支持带有前缀term运算符的LIKE子集。来自docs(http://msdn.microsoft.com/en-us/library/ms187787.aspx):
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
将返回名为chainsaw,chainmail等的产品。从功能上讲,这不会超过标准的
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%';
它实现了一个(可能)索引的中缀搜索,但它并不是特别漂亮(我从未测试过这个以查看查询优化器是否会在其计划中使用这两个索引)。     
您必须了解索引的工作原理。索引就像百科全书的死木版一样。 如果您使用:
SELECT * from customer where name like username%
索引,全文或没有全文应该工作。但
SELECT * from customer where name like %username%
永远不会使用索引。这将是耗时的查询。     
在我对全文索引的了解中,我将做以下推断: 索引时,它解析文本,搜索单词(一些RDBMS,如MySQL,只考虑长于3个字符的单词),并将单词放在索引中。 在全文索引中搜索时,搜索单词,然后链接到该行。 如果我对前两个(对于MSSQL)是正确的,那么它只有在你搜索长度为4或更多字符的WORDS时才有效。如果你找'椅子',它将找不到'扶手椅'。 假设所有这些都是正确的,我将继续并发表以下声明:全文索引实际上是一个索引,这使搜索更快。它很大,搜索能力比LIKE少,但速度更快。 更多信息: http://www.developer.com/db/article.php/3446891 http://en.wikipedia.org/wiki/Full_text_search     
喜欢和包含是非常不同的 - 获取以下数据值 '约翰·史密斯' 'sam smith' 'john fuller' 喜欢'%' 'sam smith' 比如'%s%' '约翰·史密斯' 'sam smith' 包含's' 包含'john' '约翰·史密斯' 'john fuller' 包含's'' '约翰·史密斯' 'sam smith' 包含s返回与包含s *相同 - 忽略初始星号,这有点痛苦但是索引是单词 - 而不是字符     
https://stackoverflow.com/users/289319/mike-chamberlain,你是完全正确的,因为你认为它不足以搜索某些'链'WHERE Name LIKE'chain%' 和Name_Reversed LIKE'niahc%'不等同于'%chain%'****     

要回复问题请先登录注册