Warum verlangsamen sich SQL FullText-Abfragen, wenn Sie ODER?
n SQL Server (2008) habe ich einen FullText-Index für zwei Spalten, nennen Sie sieTable1.FirstNames
undTable2.LastNames
. Nachdem ich einige Abfragen profiliert hatte, stellte ich die folgenden Ergebnisse fest:
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR CONTAINS(LastNames, 'Bob')
=> 31 197 ms
SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE (FirstNames LIKE '%Bob%') OR CONTAINS(LastNames, 'Bob')
=> 1941 ms
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%'
=> 670 ms
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
Dieses Verhalten bleibt auch dann bestehen, wenn ich den FullText-Index neu erstelle.
FullText ist normalerweise viel schneller als eine LIKE-Abfrage über große Datenmengen in einer bestimmten Sprache. Warum verlangsamen sich die Abfragegeschwindigkeiten jedoch um eine Größenordnung, wenn ich zwei FullText-Klassen ODER zusammenstelle?