2012-04-12 10 views
12

Ich möchte lernen, wie Sie Spatial Index in SQL Server 2012 verwenden. Ich habe einige sehr zeitaufwendige Abfrage, so dass ich es brauche.Verwenden von Spatial Index

Ich wäre sehr dankbar für ein Beispiel und eine Erklärung.

Danke!

Antwort

15

Ich habe vor einiger Zeit eine Sitzung auf der SQLBits-Konferenz vorgestellt, die Sie vielleicht hilfreich finden. Sie können sehen noch das Video und slidedeck online unter: http://sqlbits.com/Sessions/Event5/Creating_High_Performance_Spatial_Databases

Auf den Punkt gebracht:

  • Räumliche Indizes völlig unterschiedlich sind gruppierte und nicht gruppierte Indizes in SQL Server.
  • Sie arbeiten mit einem "primären Filter" für eine räumliche Abfrage - der räumliche Index verwendet ein Raster, um eine ungefähre Menge möglicher Kandidatenergebnisse auszuwählen, die jedoch auch falsche positive Ergebnisse enthalten kann.
  • Ein sekundärer Filter beseitigt dann die falschen positiven Ergebnisse, um das richtige Ergebnis für die Abfrage zu erhalten.
  • Der Schlüssel zu einer schnellen räumlichen Abfrage besteht darin, einen Index zu erstellen, der genau ist (dh wenige falsche Positive), aber klein (dh nicht zu viele Datensätze), so dass der Hauptteil der Arbeit vom Primärfilter erledigt wird und nicht der teurere Sekundärfilter.
  • Sie können einen räumlichen Index für eine Spalte mit Geometrie-/geografischen Daten mithilfe von SQL Server Management Studio oder mithilfe einer CREATE INDEX T-SQL-Anweisung erstellen. Dieser Index wird jedoch nicht immer automatisch in Abfragen verwendet. Überprüfen Sie, ob ein räumlicher Index verwendet wird, den Abfrageausführungsplan für einen Clustered Index Seek (Räumlich) Artikel.
  • Um sicherzustellen, dass ein räumlicher Index zur Erfüllung einer Abfrage verwendet wird, können Sie einen expliziten Indexhinweis hinzufügen, indem Sie WITH (index (YourSpatialIndex)) dem Tabellennamen in Ihrer SELECT-Anweisung folgen.

Es gibt verschiedene räumliche Index-spezifische Einstellungen, die die Leistung des primären Filters beeinflussen können. Zu Beginn würde ich empfehlen, dass Sie sich an den Standard halten, der MITTEL-Auflösung auf allen vier Rasterebenen und 16 Zellen pro Objekt aufweist. Wenn Sie den Geometrie-Datentyp verwenden, stellen Sie sicher, dass Sie eine BOUNDING_BOX festlegen, die den gesamten Datensatz umfasst (geografische Indizes decken immer den gesamten Globus ab, sodass dies nicht erforderlich ist). Versuchen Sie dann, jeweils eine Einstellung zu optimieren und die Leistungssteigerung/-minderung zu messen.

< Stecker> Es gibt ein Kapitel zu räumlichen Indizierung und Verbesserung der Leistung von räumlichen Abfragen in dem kommend "Pro Spatial mit SQL Server 2012" gewidmet </Stecker> - http://www.amazon.com/Pro-Spatial-SQL-Server-2012/dp/1430234911/ref=sr_1_3?ie=UTF8&qid=1334310547&sr=8-3 (vollständiger Haftungsausschluss - Ich bin der Autor)

+0

Danke, Mann! Du bist großartig! Das ist, was ich gesucht habe. – Nenad

+0

Aitchison, ich habe ein Problem mit Spatial Index - http://Stackoverflow.com/questions/11088775/error-when-using-spatial-index-in-sql-server Können Sie bitte helfen? Vielen Dank! – Nenad

Verwandte Themen