下面哪个查询更快(LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
或
SELECT * FROM table WHERE Contains(Column, "test");
第二个(假设你指的是CONTAINS,并且实际上把它放在一个有效的查询中)应该更快,因为它可以使用一些形式的索引(在这种情况下,是全文索引)。当然,这种形式的查询仅适用于如果中的列是全文索引。如果不是,那么只有第一种形式可用。
CONTAINS
第一个查询,使用LIKE,将不能使用索引,因为它以通配符开始,所以总是需要全表扫描。
CONTAINS查询应该是:
SELECT * FROM table WHERE CONTAINS(Column, 'test');
在SQL Server 2012实例上运行这两个查询后,我可以确认第一个查询在我的情况下是最快的。
带有LIKE关键字的查询显示了群集索引扫描。
LIKE
CONTAINS还有一个聚集索引扫描,带有用于全文匹配的附加操作符和一个合并连接。
我认为CONTAINS花费了更长的时间并使用了Merge,因为您在查询adventure-works.com中有一个破折号(“-”)。
Merge
adventure-works.com
破折号是一个中断词,所以CONTAINS搜索全文索引的adventure,然后搜索works.com并合并结果。
adventure
works.com
也试着改变一下:
SELECT * FROM table WHERE Contains(Column, "test") > 0;
:
SELECT * FROM table WHERE Contains(Column, '"*test*"') > 0;
前者将找到值为“这是一个测试”和“一个测试用例就是计划”的记录。
后者还会找到值为“我正在测试这个”和“这是最棒的”的记录。
我不明白“包含”到底是怎么回事;关键字。我在一个列上设置了全文索引。我在表上运行一些查询。 Like返回450.518行但不包含,并且Like的结果是正确的
SELECT COL FROM TBL WHERE COL LIKE '%41%' --450.518 rows SELECT COL FROM TBL WHERE CONTAINS(COL,N'41') ---40 rows SELECT COL FROM TBL WHERE CONTAINS(COL,N'"*41*"') -- 220.364 rows