SQL服务器上的LIKE与CONTAINS
以下哪一个查询更快(LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
或
SELECT * FROM table WHERE Contains(Column, "test");
190
3
以下哪一个查询更快(LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
或
SELECT * FROM table WHERE Contains(Column, "test");
第二种(假设你的意思是
CONTAINS
,并且实际上把它放在一个有效的查询中)应该更快,因为它可以使用*某种形式的索引(在这种情况下,是一个全文索引)。当然,这种形式的查询只有在**列在全文索引中时才可用。如果不是,那么就只有第一种形式可用。第一个查询,使用LIKE,将无法使用索引,因为它以通配符开始,所以总是需要全表扫描。
"CONTAINS "查询应该是。
在SQL Server 2012实例上运行这两个查询后,我可以确认在我的情况下第一个查询是最快的。
带有 "LIKE "关键字的查询显示了一个聚类索引扫描。
CONTAINS
也有一个聚类索引扫描,并有额外的操作者进行全文匹配和合并连接。我认为
CONTAINS'花费的时间较长,并且使用了
Merge',因为你的查询`adventure-works.com'中有一个破折号("-")。破折号是一个断裂词,所以
CONTAINS
在全文索引中搜索adventure
,然后再搜索works.com
,并将结果合并。