Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I optimize/refactor a TSQL "LIKE" clause?

I have a table with 117000 or so records. I need to perform a search that checks 3 separate fields for a given string pattern.

My where clause is as follows:

field1 LIKE '%' + @DESC + '%'
OR field2 LIKE '%' + @DESC + '%'
OR field3 LIKE '%' + @DESC + '%'

This seems to take about 24 seconds regardless of input...

Is there a better way to do this? Less than 10 (or 5!) seconds would be much more preferable.

Thanks for any help.

like image 912
IronicMuffin Avatar asked Oct 14 '09 21:10

IronicMuffin


People also ask

What is like %% in SQL?

The LIKE operator is used in a WHERE clause to search for a specified pattern in a column. There are two wildcards often used in conjunction with the LIKE operator: The percent sign (%) represents zero, one, or multiple characters. The underscore sign (_) represents one, single character.

How do I refactor SQL code?

sql) in Solution Explorer and select View Code to open the script in Transact-SQL editor. Right click [Products] in the script, select Refactor, and Rename. In the New Name field, change it to Product. Leave the Preview Changes option checked and click OK.


2 Answers

Use Full Text Search and CONTAINS. LIKE cannot be optimized when searching in the middle of the field, ie. when the LIKE expression starts with an '%', so it will always do a full table scan.

like image 121
Remus Rusanu Avatar answered Oct 05 '22 11:10

Remus Rusanu


Anytime you start a LIKE search with a wildcard, you're doing a scan. Unless you can narrow your search criteria to include the first character (which may not be feasible), you'll need to resort to Full Text Search.

like image 22
Stuart Ainsworth Avatar answered Oct 05 '22 13:10

Stuart Ainsworth