Which one of the following queries is faster (LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
or
SELECT * FROM table WHERE Contains(Column, "test");
Which one of the following queries is faster (LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
or
SELECT * FROM table WHERE Contains(Column, "test");
CONTAINS Searches for precise or fuzzy (less precise) matches to single words and phrases, words within a certain distance of one another, or weighted matches in SQL Server.
CONTAINS can search for:
Note: CONTAINS is faster and will work if there is updated full-text index. If you want exact regular expression match then you can use like.
Also try changing from this:
To this:
The former will find records with values like "this is a test" and "a test-case is the plan".
The latter will also find records with values like "i am testing this" and "this is the greatest".
I think that
CONTAINS
took longer and usedMerge
because you had a dash("-") in your queryadventure-works.com
.The dash is a break word so the
CONTAINS
searched the full-text index foradventure
and than it searched forworks.com
and merged the results.The second (assuming you means
CONTAINS
, and actually put it in a valid query) should be faster, because it can use some form of index (in this case, a full text index). Of course, this form of query is only available if the column is in a full text index. If it isn't, then only the first form is available.The first query, using LIKE, will be unable to use an index, since it starts with a wildcard, so will always require a full table scan.
The
CONTAINS
query should be:Having run both queries on a SQL Server 2012 instance, I can confirm the first query was fastest in my case.
The query with the
LIKE
keyword showed a clustered index scan.The
CONTAINS
also had a clustered index scan with additional operators for the full text match and a merge join.