Kumpi seuraavista kyselyistä on nopeampi (LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
vai
SELECT * FROM table WHERE Contains(Column, "test");
Toisen (olettaen, että tarkoitat CONTAINS
ja laitat sen oikeasti kelvolliseen kyselyyn) pitäisi olla nopeampi, koska se voi käyttää jotain indeksin muotoa (tässä tapauksessa kokoteksti-indeksiä). Tämä kyselymuoto on tietysti käytettävissä vain jos sarake on kokoteksti-indeksissä. Jos se ei ole, vain ensimmäinen muoto on käytettävissä.
Ensimmäinen LIKE-kysely ei voi käyttää indeksiä, koska se alkaa jokerimerkillä, joten se vaatii aina koko taulukon skannauksen.
CONTAINS
-kyselyn pitäisi olla:
SELECT * FROM table WHERE CONTAINS(Column, 'test');
Kun olen suorittanut molemmat kyselyt SQL Server 2012 -palvelimella, voin vahvistaa, että ensimmäinen kysely oli minun tapauksessani nopein.
Avainsanalla LIKE
varustettu kysely osoitti klusteroidun indeksin skannauksen.
Myös CONTAINS
-kyselyssä oli klusteroitu indeksin skannaus, jossa oli lisäoperaattoreita koko tekstin vastaavuutta ja yhdistämistä varten.
Luulen, että CONTAINS
kesti kauemmin ja käytti Merge
, koska kyselyssäsi adventure-works.com
oli katkoviiva ("-").
Viiva on taukosana, joten CONTAINS
etsi kokoteksti-indeksistä hakusanaa adventure
ja sen jälkeen hakusanaa works.com
ja yhdisti tulokset.