In SQL Server (2008), ho un indice FullText su due colonne, chiamiamolo Table1.FirstNames
e Table2.LastNames
. Dopo profiling alcune query, mi si avvicinò con i seguenti risultati:Perché le query SQL FullText rallentano quando si?
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR CONTAINS(LastNames, 'Bob')
=> 31 197ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE (FirstNames LIKE '%Bob%') OR CONTAINS(LastNames, 'Bob')
=> 1941ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR LastNames LIKE '%Bob%'
=> 3201ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob')
=> 565 ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE FirstNames LIKE '%Bob%'
=> 670ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(LastNames, 'Bob')
=> 17ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE LastNames LIKE '%Bob%'
=> 3ms
Questo comportamento persiste anche se ricostruisco l'indice full-text.
FullText è in genere molto più veloce di una query LIKE su insiemi di dati di grandi dimensioni in una lingua specifica, ma perché le velocità di query rallentano di un ordine di grandezza quando I O insieme a due clase di FullText?
Come si comporta 'DOVE firstnames Like '% Bob% 'OR Cognome come'% Bob% ''funziona? –
Circa 2 secondi (sto lavorando con lui su questo) – tghw