Ich versuche, die Leistung einer SQL Server 2008-Volltextabfrage zu verstehen, die ich erstelle.SQL Server-Volltextabfrage über mehrere Tabellen - warum so langsam?
Die folgende Abfrage, einen Volltextindex verwendet wird, gibt die richtigen Ergebnisse sofort:
SELECT
O.ID, O.Name
FROM
dbo.EventOccurrence O
WHERE
FREETEXT(O.Name, 'query')
dh alle EventOccurrences mit dem Wort ‚Abfrage‘ in ihrem Namen. Und die folgende Abfrage, die einen Volltextindex aus einer anderen Tabelle verwendet, wird ebenfalls sofort zurückgegeben:
ie. alle Orte mit dem Wort "query" in ihrem Namen. Aber wenn ich versuche, die Tabellen zu verknüpfen und tun, beiden Volltextabfragen auf einmal, es 12 Sekunden zurück:
SELECT
O.ID, O.Name
FROM
dbo.EventOccurrence O
INNER JOIN dbo.Event E ON O.EventID = E.ID
INNER JOIN dbo.Venue V ON E.VenueID = V.ID
WHERE
FREETEXT(E.Name, 'search')
OR FREETEXT(V.Name, 'search')
Hier ist der Ausführungsplan: http://uploadpad.com/files/query.PNG
UPDATE: der Plan in Text Form:
|--Nested Loops(Left Semi Join, OUTER REFERENCES:([E].[ID], [V].[ID]))
|--Hash Match(Inner Join, HASH:([E].[ID])=([O].[EventID]))
| |--Hash Match(Inner Join, HASH:([V].[ID])=([E].[VenueID]))
| | |--Clustered Index Scan(OBJECT:([iScene].[dbo].[Venue].[PK_Venue] AS [V]))
| | |--Clustered Index Scan(OBJECT:([iScene].[dbo].[Event].[PK_Event] AS [E]))
| |--Clustered Index Scan(OBJECT:([iScene].[dbo].[EventOccurrence].[PK_EventOccurrence] AS [O]))
|--Concatenation
|--Table-valued function
|--Table-valued function
Aus meiner Lektüre, ich habe es nicht einmal möglich war, eine freie Textabfrage über mehrere Tabellen in dieser Art und Weise zu machen, also bin ich nicht sicher, ob ich das richtig bin zu verstehen.
Beachten Sie, dass, wenn ich die WHERE-Klausel aus dieser letzten Abfrage entfernen, es alle Ergebnisse innerhalb einer Sekunde zurückgibt, so ist es definitiv der Volltext, der das Problem hier verursacht.
Kann jemand erklären (i) warum das so langsam ist und (ii) ob das überhaupt unterstützt wird/wenn ich das überhaupt richtig verstehe.
Vielen Dank im Voraus für Ihre Hilfe.
Können Sie den tatsächlichen Plan veröffentlichen. Nicht das Bild? –
OK habe es nur für dich hinzugefügt. –