Wie kann ich diese angeben, die SQL-Index-Hinweis auf meinem SQL Server 2008 query?
Ich bin nicht sicher, wo/wie ich diese angeben, SQL-Spatial-Index-Hinweis auf meine Anfrage :-
SELECT Whatever
FROM Table1 a
INNER JOIN Table2 b ON a.Id = b.Id
WHERE @SomeBoundingBox.STIntersects(b.SomeGeographyShape) = 1
Wenn ich die Abfrage ausführen, ist es NICHT mit dem Räumlichen Hinweis. Ja, ich verwende die neueste version SQL Server 2008 r2 (v 10.5.1600.1).
So vergleichen Sie die Abfrage-Geschwindigkeit zwingt den Tipp, ich habe versucht...
SELECT Whatever
FROM Table1 a
INNER JOIN Table2 b WITH (INDEX(MySpatialIndex)) ON a.Id = b.Id
WHERE @SomeBoundingBox.STIntersects(b.SomeGeographyShape) = 1
und das funktionierte, aber es war wirklich eine schlechte Leistung. Ich Frage mich, ob es wurde versucht, mit meinem Hinweis zu tun, der a.Id = b.Id
beitreten (die ich nicht wollen, verwenden Sie den Hinweis, für).
Irgendwelche Vorschläge?
UPDATE:
Hinzugefügt Abfrage-Plan. Der Großteil der Kosten ist die VERKNÜPFUNG zwischen den beiden Tabellen. Der Filter (where-Klausel) greift die 2. teuerste Teil.
InformationsquelleAutor Pure.Krome | 2010-11-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde vorschlagen, NICHT, daß der Hinweis. Es gibt einen Grund, dass der SQL-Server ist die Auswahl der Ausführungsplan, der es ist, und wie Sie vermutet, zwingt einen anderen plan wird fast immer zu einer verringerten Leistung führen.
Stattdessen, was Sie tun möchten, ist überprüfen Sie Ihre Indizes und Abfrage-Ausführungspläne im detail, Folgen die einzelnen Knoten des Ausführungsplans (vor allem diejenigen mit einer hohen relativen Kosten) und sehen, ob Sie tun können, mit welchen SQL Server Sie tun will, um die Abholung Ihrer MySpatialIndex index, ohne Sie zu zwingen, dies zu tun. In der Regel, es wird nur ein Feld fehlt, aus einem index dazu führen, dass der Ausführungsplan zu erarbeiten, wie man eben will... und nicht zwingen notwendig.
InformationsquelleAutor Flipster
Warum denkst du, dass das Problem in der
ON
- Klausel? Sie sind mit der Funktion in derWHERE
Teil angewandt, um dieb
Tisch - das ist, warum Sie fullscan über Ihrea
Tisch, und partial scan überb
Tabelle.STIntersects
ist ein besonderer Fall für die where-Klausel.yep, scheint, ist es mein Versagen.
InformationsquelleAutor zerkms