use*_*429 190 sql-server performance contains sql-like
以下哪个查询更快(LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM table WHERE Contains(Column, "test");
Run Code Online (Sandbox Code Playgroud)
Dam*_*ver 156
第二个(假设你的意思CONTAINS,实际上把它放在一个有效的查询中)应该更快,因为它可以使用某种形式的索引(在这种情况下,全文索引).当然,只有当列在全文索引中时,才能使用这种形式的查询.如果不是,那么只有第一种形式可用.
使用LIKE的第一个查询将无法使用索引,因为它以通配符开头,因此始终需要全表扫描.
该CONTAINS查询应该是:
SELECT * FROM table WHERE CONTAINS(Column, 'test');
Run Code Online (Sandbox Code Playgroud)
小智 13
在SQL Server 2012实例上运行两个查询后,我可以确认第一个查询在我的情况下最快.
带有LIKE关键字的查询显示了聚簇索引扫描.
该CONTAINS还与对全文匹配和合并连接额外的运营商聚集索引扫描.

小智 6
也可以尝试从此更改:
SELECT * FROM table WHERE Contains(Column, "test") > 0;
Run Code Online (Sandbox Code Playgroud)
对此:
SELECT * FROM table WHERE Contains(Column, '"*test*"') > 0;
Run Code Online (Sandbox Code Playgroud)
前者将查找具有“ 这是一个测试 ”和“ 一个测试用例是计划 ”之类的值的记录。
后者还将找到诸如“ 我正在测试 ”和“ 这是最大的 ” 等值的记录。
小智 5
我认为这CONTAINS需要更长时间并且Merge因为你在查询中有一个短划线(" - ")adventure-works.com.
短划线是一个中断词,因此CONTAINS搜索全文索引adventure并搜索works.com并合并结果.