以下哪个查询更快(LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
或
SELECT * FROM table WHERE Contains(Column, "test");
答案 0 :(得分:145)
第二个(假设你的意思是CONTAINS
,实际上把它放在一个有效的查询中)应该更快,因为它可以使用一些形式的索引(在这种情况下,一个完整的文字索引)。当然,这种形式的查询只有如果列在全文索引中。如果不是,那么只有第一种形式可用。
使用LIKE的第一个查询将无法使用索引,因为它以通配符开头,因此始终需要进行全表扫描。
CONTAINS
查询应为:
SELECT * FROM table WHERE CONTAINS(Column, 'test');
答案 1 :(得分:23)
CONTAINS搜索与单个单词和短语,彼此相距一定距离内的单词或SQL Server中的加权匹配的精确或模糊(不太精确)匹配。
CONTAINS可以搜索:
答案 2 :(得分:13)
在SQL Server 2012实例上运行两个查询后,我可以确认第一个查询在我的情况下最快。
LIKE
关键字的查询显示了聚集索引扫描。
CONTAINS
还有一个聚集索引扫描,其中包含全文匹配和合并连接的附加运算符。
答案 3 :(得分:5)
我认为CONTAINS
需要更长的时间并使用Merge
,因为您在查询adventure-works.com
中有一个短划线(" - ")。
短划线是一个中断词,因此CONTAINS
搜索了adventure
的全文索引,而不是搜索works.com
并合并了结果。
答案 4 :(得分:4)
还可以尝试改变:
SELECT * FROM table WHERE Contains(Column, "test") > 0;
对此:
SELECT * FROM table WHERE Contains(Column, '"*test*"') > 0;
前者会找到值为" 这是测试的记录"和" 测试用例是计划"。
后者还会查找记录值为" 我正在测试此"和" 这是最伟大的"。