SQL服务器上的LIKE与CONTAINS

以下哪一个查询更快(LIKE vs CONTAINS)?

SELECT * FROM table WHERE Column LIKE '%test%';

SELECT * FROM table WHERE Contains(Column, "test");

第二种(假设你的意思是CONTAINS,并且实际上把它放在一个有效的查询中)应该更快,因为它可以使用*某种形式的索引(在这种情况下,是一个全文索引)。当然,这种形式的查询只有在**列在全文索引中时才可用。如果不是,那么就只有第一种形式可用。

第一个查询,使用LIKE,将无法使用索引,因为它以通配符开始,所以总是需要全表扫描。


"CONTAINS "查询应该是。

SELECT * FROM table WHERE CONTAINS(Column, 'test');
评论(3)

在SQL Server 2012实例上运行这两个查询后,我可以确认在我的情况下第一个查询是最快的。

带有 "LIKE "关键字的查询显示了一个聚类索引扫描。

CONTAINS也有一个聚类索引扫描,并有额外的操作者进行全文匹配和合并连接。

评论(4)

我认为CONTAINS'花费的时间较长,并且使用了Merge',因为你的查询`adventure-works.com'中有一个破折号("-")。

破折号是一个断裂词,所以CONTAINS在全文索引中搜索adventure,然后再搜索works.com,并将结果合并。

评论(0)