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%'; 它实现了一个(潜在的)索引的中缀搜索,但它并不特别漂亮(我从来没有测试过这个,以查看查询优化器是否甚至在其计划中使用这两个索引)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SQLServer函数 left()、charindex()、stuff()的使用
- sql-server – SQL Server Management Studio:打开表格,通
- sqlserver数据库模糊查询语句
- MySQL数据备份之mysqldump的使用详解
- sql – 按照插入的确切顺序返回行
- SQLServer无法安装-提示command line option syntax error
- SQLServer 20005 简化了分页查询以及行做序号功能
- Access,SqlServer, Oracle, DB2 常用的几个函数
- sql – 如何获取存储过程参数的详细信息?
- sqlserver中identity的使用