Hvilken av følgende spørringer er raskere (LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
eller
SELECT * FROM table WHERE Contains(Column, "test");
Den andre (forutsatt at du mener CONTAINS
, og faktisk legger den inn i en gyldig spørring) bør være raskere, fordi den kan bruke en eller annen form for indeks (i dette tilfellet en fulltekstindeks). Selvfølgelig er denne formen for spørring bare tilgjengelig hvis kolonnen er i en fulltekstindeks. Hvis den ikke er det, er bare den første formen tilgjengelig.
Den første spørringen, som bruker LIKE, vil ikke kunne bruke en indeks, siden den starter med et jokertegn, og vil derfor alltid kreve en fullstendig tabellskanning.
Spørringen CONTAINS
skal være:
SELECT * FROM table WHERE CONTAINS(Column, 'test');
Etter å ha kjørt begge spørringene på en SQL Server 2012-instans, kan jeg bekrefte at den første spørringen var raskest i mitt tilfelle.
Spørringen med nøkkelordet LIKE
viste en gruppert indeksskanning.
CONTAINS` hadde også en gruppert indeksskanning med flere operatorer for fulltekstmatch og en merge join.
Plan]1
Jeg tror at CONTAINS
tok lengre tid og brukte Merge
fordi du hadde en bindestrek ("-") i spørringen adventure-works.com
.
Bindestreken er et skilletegn, så CONTAINS
søkte i fulltekstindeksen etter adventure
og deretter søkte den etter works.com
og slo sammen resultatene.