Wie kann ich beschleunigen das Sql Server Spatial-Abfrage?

Habe ich (was ich denke) ist eine einfache Sql Server spatial-Abfrage:

Greifen Sie alle USA-Staaten, die gibt es in einem 4-seitiges polygon (ie. der viewport/bounding-box des web-Seite, die die google - /bing-Karte)

SELECT CAST(2 AS TINYINT) AS LocationType, a.Name AS FullName, 
    StateId, a.Name, Boundary.STAsText() AS Boundary, 
    CentrePoint.STAsText() AS CentrePoint
FROM [dbo].[States] a
WHERE @BoundingBox.STIntersects(a.Boundary) = 1

Dauert es 6 Sekunden zu laufen 🙁

Hier ist der Ausführungsplan....

Entfernt

Und die stats auf den Filter-Vorgang...

Entfernt

Nun, ich bin nur nicht sicher, wie Sie Sie Debuggen .., um herauszufinden, was ich brauche, um die Feinabstimmung, etc. Habe ich irgendwelche räumliche Indizes? Ich glaube, so ...

/****** Object:  Index [SPATIAL_States_Boundary]    
        Script Date: 07/28/2010 18:03:17 ******/
CREATE SPATIAL INDEX [SPATIAL_States_Boundary] ON [dbo].[States] 
(
    [Boundary]
)USING  GEOGRAPHY_GRID 
WITH (
    GRIDS =(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH), 
    CELLS_PER_OBJECT = 1024, PAD_INDEX  = OFF, SORT_IN_TEMPDB = OFF, 
    DROP_EXISTING = OFF, ALLOW_ROW_LOCKS  = ON, 
    ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

Brauche ich, um etwas mehr Informationen über die GEOGRAPHY Daten, die zurückgegeben wird? zB. Anzahl der Punkte, etc? Oder benötige ich, um profiler und geben Sie einige Statistiken von dort?

Oder sind meine Cells_per_object - /Grids falsch eingestellt ( ich habe wirklich keine Ahnung, was ich werden sollte, diese Werte zu, TBH).

Kann bitte jemand helfen? Bitte?

UPDATE/EDIT:

Nach der ersten Antwort von @Bobs unter, die bestätigt, dass der räumliche index nicht immer verwendet, da der Primary Key (clustered Index) wäre schneller als ein nicht-gruppierter index für eine Tabelle mit 50 ungerade Zeilen ... ich habe dann versucht zu zwingen, den Räumlichen Index (für die hosenscheisser-n-kichert) :-

SELECT CAST(2 AS TINYINT) AS LocationType, a.Name AS FullName, 
    StateId, a.Name, Boundary.STAsText() AS Boundary, 
    CentrePoint.STAsText() AS CentrePoint
FROM [dbo].[States] a WITH (INDEX(SPATIAL_States_Boundary))
WHERE @BoundingBox.STIntersects(a.Boundary) = 1

... und erraten, was .. führt die Abfrage sofort.

WTF??? Alle anderen wissen, warum? Muss ich die post ein Abfrageplan für das, auch, zu helfen, zu erklären, warum/was?

InformationsquelleAutor Pure.Krome | 2010-07-28

Schreibe einen Kommentar