SQL-Serve-Volltextsuche mit Containstable ist sehr langsam, wenn in JOIN!

Ich verwende die SQL 2008-Volltextsuche und habe schwerwiegende Probleme mit der Leistung, je nachdem, wie ich Contains oder ContainsTable verwende.

Hier ist ein Beispiel: (Tabelle 1 hat ungefähr 5000 Datensätze und es gibt einen verdeckten Index für Tabelle 1, der alle Felder in der where-Klausel enthält. Ich habe versucht, die Anweisungen zu vereinfachen, also verzeih mir, wenn es Syntaxprobleme gibt.)

Szenario 1

select * from table1 as t1
where t1.field1=90
and   t1.field2='something'
and   Exists(select top 1 * from containstable(table1,*, 'something') as t2 
where t2.[key]=t1.id)

Ergebnis: 10 Sekunden (sehr langsam)

Szenario 2:

select * from table1 as t1
join containstable(table1,*, 'something') as t2 on t2.[key] = t1.id
where t1.field1=90
and   t1.field2='something'

Ergebnis: 10 Sekunden (sehr langsam)

Szenario 3:

Declare @tbl Table(id uniqueidentifier primary key)
insert into @tbl select {key] from containstable(table1,*, 'something')

select * from table1 as t1
where t1.field1=90
and   t1.field2='something'
and  Exists(select id from @tbl as tbl where id=req1.id)

Ergebnis: Sekundenbruchteil (super schnell)

Bottom line, es scheint, wenn ich Containstable in irgendeiner Art von Join oder Where-Klausel-Bedingung einer Select-Anweisung verwende, die auch andere Bedingungen hat, ist die Leistung wirklich schlecht. Wenn Sie sich den Profiler ansehen, geht die Anzahl der Lesevorgänge aus der Datenbank auf das Dach. Aber wenn ich zuerst die Volltextsuche durchführe und die Ergebnisse in eine Tabellenvariable lege und diese Variable verwende, geht alles super schnell. Die Anzahl der Lesevorgänge ist ebenfalls viel geringer. Es scheint in "schlechten" Szenarien, irgendwie steckt es in einer Schleife, die dazu führt, dass es viele Male aus der Datenbank liest, aber ich verstehe natürlich nicht warum.

Nun ist die Frage zuallererst, warum das passiert? und Frage zwei ist, wie skalierbare Tabellenvariablen sind? Was ist, wenn es zu Zehntausenden von Datensätzen führt? wird es noch schnell gehen.

Irgendwelche Ideen? Vielen Dan

Antworten auf die Frage(6)

Ihre Antwort auf die Frage