CREATE SPATIAL INDEX (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Erstellt für eine angegebene Tabelle und Spalte in SQL Server einen räumlichen Index. Ein Index kann erstellt werden, bevor Daten in der Tabelle enthalten sind. Indizes können für Tabellen oder Sichten einer anderen Datenbank durch Angabe eines gekennzeichneten Datenbanknamens erstellt werden. Bei räumlichen Indizes muss die Tabelle einen gruppierten Primärschlüssel aufweisen. Räumliche Indizes können nicht für indizierte Sichten angegeben werden. Weitere Informationen zu räumlichen Indizes finden Sie unter Übersicht über räumliche Indizes.

Transact-SQL-Syntaxkonventionen

Syntax

CREATE SPATIAL INDEX index_name
  ON <object> ( spatial_column_name )  
    {  
       <geometry_tessellation> | <geography_tessellation>  
    }
  [ ON { filegroup_name | "default" } ]  
[;]
  
<object> ::=  
    { database_name.schema_name.table_name | schema_name.table_name | table_name }  
  
<geometry_tessellation> ::=  
{
  <geometry_automatic_grid_tessellation>
| <geometry_manual_grid_tessellation>
}  
  
<geometry_automatic_grid_tessellation> ::=  
{  
    [ USING GEOMETRY_AUTO_GRID ]  
          WITH  (  
        <bounding_box>  
            [ [,] <tessellation_cells_per_object> [ ,...n] ]  
            [ [,] <spatial_index_option> [ ,...n] ]  
                 )  
}  
  
<geometry_manual_grid_tessellation> ::=  
{  
       [ USING GEOMETRY_GRID ]  
         WITH (  
                    <bounding_box>  
                        [ [,]<tessellation_grid> [ ,...n] ]  
                        [ [,]<tessellation_cells_per_object> [ ,...n] ]  
                        [ [,]<spatial_index_option> [ ,...n] ]  
   )  
}
  
<geography_tessellation> ::=  
{  
      <geography_automatic_grid_tessellation> | <geography_manual_grid_tessellation>  
}  
  
<geography_automatic_grid_tessellation> ::=  
{  
    [ USING GEOGRAPHY_AUTO_GRID ]  
    [ WITH (  
        [ [,] <tessellation_cells_per_object> [ ,...n] ]  
        [ [,] <spatial_index_option> ]  
     ) ]  
}  
  
<geography_manual_grid_tessellation> ::=  
{  
    [ USING GEOGRAPHY_GRID ]  
    [ WITH (  
                [ <tessellation_grid> [ ,...n] ]  
                [ [,] <tessellation_cells_per_object> [ ,...n] ]  
                [ [,] <spatial_index_option> [ ,...n] ]  
                ) ]  
}  
  
<bounding_box> ::=  
{  
      BOUNDING_BOX = ( {  
       xmin, ymin, xmax, ymax
       | <named_bb_coordinate>, <named_bb_coordinate>, <named_bb_coordinate>, <named_bb_coordinate>
  } )  
}  
  
<named_bb_coordinate> ::= { XMIN = xmin | YMIN = ymin | XMAX = xmax | YMAX=ymax }  
  
<tessellation_grid> ::=  
{
    GRIDS = ( { <grid_level> [ ,...n ] | <grid_size>, <grid_size>, <grid_size>, <grid_size>  }
        )  
}  
<tessellation_cells_per_object> ::=  
{
   CELLS_PER_OBJECT = n
}  
  
<grid_level> ::=  
{  
     LEVEL_1 = <grid_size>
  |  LEVEL_2 = <grid_size>
  |  LEVEL_3 = <grid_size>
  |  LEVEL_4 = <grid_size>
}  
  
<grid_size> ::= { LOW | MEDIUM | HIGH }  
  
<spatial_index_option> ::=  
{  
    PAD_INDEX = { ON | OFF }  
  | FILLFACTOR = fillfactor  
  | SORT_IN_TEMPDB = { ON | OFF }  
  | IGNORE_DUP_KEY = OFF  
  | STATISTICS_NORECOMPUTE = { ON | OFF }  
  | DROP_EXISTING = { ON | OFF }  
  | ONLINE = OFF  
  | ALLOW_ROW_LOCKS = { ON | OFF }  
  | ALLOW_PAGE_LOCKS = { ON | OFF }  
  | MAXDOP = max_degree_of_parallelism  
    | DATA_COMPRESSION = { NONE | ROW | PAGE }  
}  

Argumente

index_name
Der Name des Indexes. Indexnamen müssen für eine Tabelle eindeutig sein, können aber innerhalb einer Datenbank mehrfach vorkommen. Indexnamen müssen den Regeln für Bezeichner entsprechen.

ON <Objekt> ( spatial_column_name )
Gibt das Objekt (Datenbank, Schema oder Tabelle), für das der Index erstellt werden soll, sowie den Namen der räumlichen Spalte an.

spatial_column_name gibt die räumliche Spalte an, auf der der Index basiert. Für die Definition eines einzelnen räumlichen Indexes kann nur eine räumliche Spalte angegeben werden. Allerdings können für eine geometry- oder geography-Spalte mehrere räumliche Indizes erstellt werden.

USING
Gibt das Mosaikschema für den räumlichen Index an. Dieser Parameter verwendet den typspezifischen, in der folgenden Tabelle angezeigten Wert:

Datentyp der Spalte Mosaikschema
geometry GEOMETRY_GRID
geometry GEOMETRY_AUTO_GRID
geography GEOGRAPHY_GRID
geography GEOGRAPHY_AUTO_GRID

Ein räumlicher Index kann nur für eine Spalte des Typs Geometrie oder Geografieerstellt werden. Andernfalls wird ein Fehler ausgelöst. Wird für einen bestimmten Typ ein ungültiger Parameter übergeben, wird ein Fehler ausgelöst.

Informationen darüber, wie in SQL Server ein Mosaik implementiert wird, finden Sie unter Übersicht über räumliche Indizes.

ON filegroup_name
Gilt für: SQL Server (SQL Server 2008 (10.0.x) und höher) und Azure SQL-Datenbank

Erstellt den angegebenen Index für die angegebene Dateigruppe. Wenn kein Speicherort angegeben und die Tabelle nicht partitioniert ist, verwendet der Index die gleiche Dateigruppe wie die zugrunde liegende Tabelle. Die Dateigruppe muss bereits vorhanden sein.

ON "default"
Gilt für: SQL Server (SQL Server 2008 (10.0.x) und höher) und Azure SQL-Datenbank

Erstellt den angegebenen Index für die Standarddateigruppe.

Die Benennung default ist in diesem Kontext kein Schlüsselwort. Es handelt sich dabei um einen Bezeichner für die Standarddateigruppe, der begrenzt sein muss, wie in ON "default" oder ON [default]. Wenn "default" angegeben wird, muss die Option QUOTED_IDENTIFIER für die aktuelle Sitzung auf ON festgelegt sein. Dies ist die Standardeinstellung. Weitere Informationen finden Sie unter SET QUOTED_IDENTIFIER (Transact-SQL).

<object>::=
Gibt das vollqualifizierte oder nicht vollqualifizierte Objekt an, das indiziert werden soll.

database_name
Der Name der Datenbank.

schema_name
Der Name des Schemas, zu dem die Tabelle gehört.

table_name
Der Name der Tabelle, die indiziert werden soll.

Azure SQL-Datenbank unterstützt das aus drei Teilen bestehende Namensformat database_name.[schema_name].object_name, wenn database_name die aktuelle Datenbank angibt oder database_name tempdb ist und object_name mit # beginnt.

USING-Optionen

GEOMETRY_GRID
Gibt das verwendete Mosaikschema für das Geometrie-Raster an. GEOMETRY_GRID kann nur für eine Spalte vom Datentyp geometry angegeben werden. GEOMETRY_GRID ermöglicht manuelle Anpassungen des Mosaikschemas.

GEOMETRY_AUTO_GRID
Gilt für: SQL Server (SQL Server 2012 (11.x) und höher) und Azure SQL-Datenbank

Kann nur für eine Spalte des geometry-Datentyps angegeben werden. Dies ist der Standardwert für diesen Datentyp; eine Angabe ist nicht erforderlich.

GEOGRAPHY_GRID
Gibt das Mosaikschema für das Geografieraster an. GEOGRAPHY_GRID kann nur für eine Spalte mit dem Datentyp geography angegeben werden.

GEOGRAPHY_AUTO_GRID
Gilt für: SQL Server (SQL Server 2012 (11.x) und höher) und Azure SQL-Datenbank

Kann nur für eine Spalte mit dem Datentyp geography angegeben werden. Dies ist der Standardwert für diesen Datentyp; eine Angabe ist nicht erforderlich.

WITH-Optionen

BOUNDING_BOX
Gibt einen aus vier Werten bestehenden numerischen Tupel zurück, der die vier Koordinaten des Begrenzungsrahmens definiert: die minimale X- und die minimale Y-Koordinate der unteren linken Ecke und die maximale X- und die maximale Y-Koordinate der oberen rechten Ecke.

xmin
Gibt die X-Koordinate der unteren linken Ecke des umgebenden Felds an.

ymin
Gibt die Y-Koordinate der unteren linken Ecke des umgebenden Felds an.

xmax
Gibt die X-Koordinate der oberen rechten Ecke des Begrenzungsrahmens an.

ymax
Gibt die Y-Koordinate der oberen rechten Ecke des Begrenzungsrahmens an.

XMIN = xmin
Gibt den Eigenschaftsnamen und -wert für die X-Koordinate der unteren linken Ecke des Begrenzungsrahmens an.

YMIN =ymin
Gibt den Eigenschaftsnamen und -wert für die Y-Koordinate der unteren linken Ecke des umgebenden Felds an.

XMAX =xmax
Gibt den Eigenschaftsnamen und -wert für die X-Koordinate der oberen rechten Ecke des umgebenden Felds an.

YMAX =ymax
Gibt den Eigenschaftsnamen und -wert für die Y-Koordinate der oberen rechten Ecke des umgebenden Felds an.

Hinweis

Die Koordinaten des umgebenden Felds gelten nur in einer USING GEOMETRY_GRID-Klausel.

xmax muss größer sein als xmin, und ymax muss größer sein als ymin. Sie können jede gültige Darstellung eines float-Werts verwenden, vorausgesetzt, dass xmax>xmin und ymax>ymin. Andernfalls werden die entsprechenden Fehler ausgelöst.

Es gibt keine Standardwerte.

Bei den Eigenschaftsnamen für umgebende Felder wird, unabhängig von der Datenbanksortierung, die Groß- und Kleinschreibung nicht beachtet.

Eigenschaftsnamen müssen jeweils nur einmal angegeben werden. Sie können in einer beliebigen Reihenfolge angegeben werden. Beispielsweise sind die folgenden Klauseln gleichwertig:

  • BOUNDING_BOX =( XMIN =xmin, YMIN =ymin, XMAX =xmax, YMAX =ymax )

  • BOUNDING_BOX =( XMIN =xmin, XMAX =xmax, YMIN =ymin, YMAX =ymax)

GRIDS
Definiert die Dichte des Rasters auf jeder Ebene eines Mosaikschemas. Wenn GEOMETRY_AUTO_GRID und GEOGRAPHY_AUTO_GRID ausgewählt werden, wird diese Option deaktiviert.

Informationen zu Mosaiken finden Sie unter Übersicht über räumliche Indizes.

Die GRIDS-Parameter lauten wie folgt:

LEVEL_1
Gibt das Raster der obersten (höchsten) Ebene an.

LEVEL_2
Gibt das Raster der zweiten Ebene an.

LEVEL_3
Gibt das Raster der dritten Ebene an.

LEVEL_4
Gibt das Raster der vierten Ebene an.

LOW
Gibt die niedrigste mögliche Dichte für das Raster auf einer bestimmten Ebene an. LOW entspricht 16 Zellen (4 x 4-Raster).

MEDIUM
Gibt die mittlere Dichte für das Raster auf einer bestimmten Ebene an. MEDIUM entspricht 64 Zellen (8 x 8-Raster).

HIGH
Gibt die höchste mögliche Dichte für das Raster auf einer bestimmten Ebene an. HIGH entspricht 256 Zellen (16 x 16-Raster).

Hinweis

Mithilfe von Ebenennamen können Sie die Ebenen in einer beliebigen Reihenfolge angeben oder Ebenen auslassen. Wenn Sie den Namen einer Ebene verwenden, müssen Sie auch die Namen aller anderen angegebenen Ebenen verwenden. Wenn Sie eine Ebene auslassen, wird die Dichte standardmäßig auf MEDIUM festgelegt.

Warnung

Bei Angabe einer ungültigen Dichte wird ein Fehler ausgelöst.

CELLS_PER_OBJECT =n
Gibt die Anzahl von Zellen pro Objekt für das Mosaik an, die vom Mosaikprozess für ein einzelnes räumliches Objekt im Index verwendet werden können. m kann jeder ganzen Zahl von 1 bis 8192 entsprechen. Wenn bei einem bestimmten Mosaik eine ungültige Anzahl übergeben wird oder die Anzahl die maximal zulässige Anzahl von Zellen überschreitet, wird ein Fehler ausgelöst.

CELLS_PER_OBJECT hat die folgenden Standardwerte:

USING-Option Standardzellen pro Objekt
GEOMETRY_GRID 16
GEOMETRY_AUTO_GRID 8
GEOGRAPHY_GRID 16
GEOGRAPHY_AUTO_GRID 12

Auf höchster Ebene verwendet die Indizierung die Anzahl von Zellen, die zum Bereitstellen eines vollständigen Mosaiks der höchsten Ebene erforderlich sind, wenn ein Objekt mehr Zellen abdeckt, als durch nangegeben sind. In solchen Fällen ist es möglich, dass ein Objekt mehr als die angegebene Anzahl von Zellen erhält. Die maximale Anzahl ist dann die Anzahl von Zellen, die von dem Raster der höchsten Ebene generiert wird, welche von der Dichte abhängt.

Der CELLS_PER_OBJECT-Wert wird von der Zellen-pro-Objekt-Mosaikregel verwendet. Informationen zu Mosaikregeln finden Sie unter Übersicht über räumliche Indizes.

PAD_INDEX = { ON | OFF }
Gilt für: SQL Server (SQL Server 2008 (10.0.x) und höher) und Azure SQL-Datenbank

Gibt die Auffüllung von Indizes an. Der Standardwert ist OFF.

EIN
Gibt an, dass der Prozentsatz des mit fillfactor angegebenen freien Speicherplatzes für die Zwischenebenenseiten des Indexes verwendet wird.

OFF oder fillfactor ist nicht angegeben
Gibt an, dass die Zwischenebenenseiten nahezu vollständig aufgefüllt sind. Allerdings ist ausreichend Speicherplatz vorhanden, um mindestens eine Zeile in der maximal für den Index möglichen Größe aufzunehmen, wenn der Schlüsselsatz auf den Zwischenseiten berücksichtigt wird.

Die Option PAD_INDEX ist nur dann hilfreich, wenn FILLFACTOR angegeben ist, da PAD_INDEX den durch FILLFACTOR angegebenen Prozentsatz verwendet. Wenn der für FILLFACTOR angegebene Prozentsatz nicht groß genug ist, um eine Zeile aufzunehmen, überschreibt Datenbank-Engine diesen Prozentsatz intern, um das Minimum zuzulassen. Auf jeder Zwischenindexseite befinden sich unabhängig vom angegebenen fillfactor-Wert nie weniger als zwei Zeilen.

FILLFACTOR =fillfactor
Gilt für: SQL Server (SQL Server 2008 (10.0.x) und höher) und Azure SQL-Datenbank

Gibt einen Prozentsatz an, der angibt, wie weit das Datenbank-Engine die Blattebene jeder Indexseite während der Indexerstellung oder -neuerstellung füllen soll. fillfactor muss ein ganzzahliger Wert zwischen 1 und 100 sein. Die Standardeinstellung ist 0. Wenn fillfactor 100 oder 0 entspricht, werden von Datenbank-Engine Indizes mit vollständig aufgefüllten Blattseiten erstellt.

Hinweis

Die Füllfaktorwerte 0 und 100 sind in jeder Hinsicht identisch.

Die FILLFACTOR-Einstellung gilt nur, wenn der Index erstellt oder neu erstellt wird. Datenbank-Engine hält den angegebenen Prozentsatz des Speicherplatzes nicht dynamisch auf den Seiten frei. Zum Anzeigen der Füllfaktoreinstellung verwenden Sie die Katalogsicht sys.indexes.

Wichtig

Das Erstellen eines gruppierten Indexes mit einem FILLFACTOR-Wert unter 100 wirkt sich auf den Speicherplatz aus, den die Daten belegen, da Datenbank-Engine die Daten beim Erstellen des gruppierten Indexes neu verteilt.

Weitere Informationen finden Sie unter Angeben des Füllfaktors für einen Index.

SORT_IN_TEMPDB = { ON | OFF }
Gilt für: SQL Server (SQL Server 2008 (10.0.x) und höher) und Azure SQL-Datenbank

Gibt an, ob temporäre Ergebnisse des Sortierens in tempdb gespeichert werden sollen. Der Standardwert ist OFF.

EIN
Die Zwischenergebnisse von Sortierungen, mit denen der Index erstellt wird, werden in tempdb gespeichert. Diese Option verringert u. U. den Zeitaufwand, der mit der Erstellung eines Indexes verbunden ist, wenn sich tempdb auf einem anderen Datenträgersatz befindet als die Benutzerdatenbank. Sie erhöht jedoch den Betrag an Speicherplatz, der während der Indexerstellung verwendet wird.

OFF
Die Zwischenergebnisse der Sortierung werden in derselben Datenbank gespeichert wie der Index.

Zusätzlich zu dem Speicherplatz, der in der Benutzerdatenbank zum Erstellen des Indexes erforderlich ist, muss tempdb ungefähr die gleiche Menge an zusätzlichem Speicherplatz aufweisen, um die Zwischenergebnisse des Sortierens zu speichern. Weitere Informationen finden Sie unter SORT_IN_TEMPDB-Option für Indizes.

IGNORE_DUP_KEY =OFF
Hat keine Auswirkungen für räumliche Indizes, da der Indextyp nie eindeutig ist. Legen Sie diese Option nicht auf ON fest, oder es wird ein Fehler ausgelöst.

STATISTICS_NORECOMPUTE = { ON | OFF}
Gibt an, ob Verteilungsstatistiken neu berechnet werden. Der Standardwert ist OFF.

EIN
Veraltete Indexstatistiken werden nicht automatisch neu berechnet.

OFF
Die automatischen Updates der Statistiken sind aktiviert.

Um das automatische Aktualisieren von Statistiken wiederherzustellen, müssen Sie STATISTICS_NORECOMPUTE auf OFF festlegen oder die UPDATE STATISTICS-Anweisung ohne die NORECOMPUTE-Klausel ausführen.

Wichtig

Wenn Sie die automatische Neuberechnung von Verteilungsstatistiken deaktivieren, wählt der Abfrageoptimierer möglicherweise nicht die optimalen Ausführungspläne für Abfragen, an denen die Tabelle beteiligt ist.

DROP_EXISTING = { ON | OFF }
Gilt für: SQL Server (SQL Server 2008 (10.0.x) und höher) und Azure SQL-Datenbank

Gibt an, dass der benannte, bereits vorhandene räumliche Index gelöscht und neu erstellt wird. Der Standardwert ist OFF.

EIN
Der vorhandene Index wird gelöscht und neu erstellt. Der angegebene Indexname muss mit dem Namen eines derzeit vorhandenen Index übereinstimmen. Die Indexdefinition kann jedoch geändert werden. Sie können beispielsweise andere Spalten, eine andere Sortierreihenfolge, ein anderes Partitionsschema oder andere Indexoptionen angeben.

OFF
Es wird ein Fehler angezeigt, wenn der angegebene Indexname bereits vorhanden ist.

Der Indextyp kann nicht mithilfe von DROP_EXISTING geändert werden.

ONLINE =OFF
Gibt an, dass zugrunde liegende Tabellen oder zugehörige Indizes für Abfragen und Datenänderungen während des Indexvorgangs nicht zur Verfügung stehen. In dieser Version von SQL Server werden Onlineindexerstellungen für räumliche Indizes nicht unterstützt. Wenn diese Option für einen räumlichen Index auf ON festgelegt ist, wird ein Fehler ausgelöst. Lassen Sie die ONLINE-Option weg, oder legen Sie ONLINE auf OFF fest.

Ein Offlineindexvorgang, der einen räumlichen Index erstellt, neu erstellt oder löscht, aktiviert eine Schemaänderungssperre (Sch-M) für die Tabelle. Dadurch wird verhindert, dass Benutzer für die Dauer des Vorgangs auf die zugrunde liegende Tabelle zugreifen können.

Hinweis

Onlineindexvorgänge sind nicht in jeder Edition von SQL Serververfügbar. Eine Liste der Funktionen, die von den SQL Server-Editionen unterstützt werden, finden Sie unter Von den SQL Server 2016-Editionen unterstützte Funktionen.

ALLOW_ROW_LOCKS = { ON | OFF }
Gilt für: SQL Server (SQL Server 2008 (10.0.x) und höher) und Azure SQL-Datenbank

Gibt an, ob Zeilensperren zulässig sind. Der Standardwert ist ON.

EIN
Zeilensperren sind beim Zugriff auf den Index zulässig. Das Datenbank-Engine bestimmt, wann Zeilensperren verwendet werden.

OFF
Zeilensperren werden nicht verwendet.

ALLOW_PAGE_LOCKS = { ON | OFF }
Gilt für: SQL Server (SQL Server 2008 (10.0.x) und höher) und Azure SQL-Datenbank

Gibt an, ob Seitensperren zulässig sind. Der Standardwert ist ON.

EIN
Seitensperren sind beim Zugriff auf den Index zulässig. Das Datenbank-Engine bestimmt, wann Seitensperren verwendet werden.

OFF
Seitensperren werden nicht verwendet.

MAXDOP =max_degree_of_parallelism
Gilt für: SQL Server (SQL Server 2008 (10.0.x) und höher) und Azure SQL-Datenbank

Überschreibt die Konfigurationsoption max degree of parallelism für die Dauer des Indexvorgangs. Sie können mit MAXDOP die Anzahl der Prozessoren begrenzen, die bei der Ausführung paralleler Pläne verwendet werden. Maximal sind 64 Prozessoren zulässig.

Wichtig

Obwohl die MAXDOP-Option syntaktisch unterstützt wird, verwendet CREATE SPATIAL INDEX derzeit immer nur einen einzelnen Prozessor.

max_degree_of_parallelism kann folgende Werte haben:

1
Unterdrückt das Generieren paralleler Pläne.

>1
Beschränkt die maximale Anzahl der Prozessoren, die bei einem parallelen Indexvorgang verwendet werden, je nach aktueller Systemauslastung auf die angegebene Zahl oder einen niedrigeren Wert.

0 (Standard)
Verwendet abhängig von der aktuellen Systemarbeitsauslastung die tatsächliche Anzahl von Prozessoren oder weniger Prozessoren.

Weitere Informationen finden Sie unter Konfigurieren von Parallelindexvorgängen.

Hinweis

Parallele Indexvorgänge sind nicht in jeder Edition von Microsoft SQL Server verfügbar. Eine Liste der Funktionen, die von den SQL Server-Editionen unterstützt werden, finden Sie unter Von den SQL Server 2016-Editionen unterstützte Funktionen.

DATA_COMPRESSION = {NONE | ROW | PAGE}
Gilt für: SQL Server (SQL Server 2012 (11.x) und höher) und Azure SQL-Datenbank

Bestimmt die Ebene der vom Index verwendeten Datenkomprimierung.

Keine
Die Daten werden im Index nicht komprimiert.

ROW
Die Daten werden im Index zeilenweise komprimiert.

PAGE
Die Daten werden im Index seitenweise komprimiert.

Bemerkungen

Jede Option kann pro CREATE SPATIAL INDEX-Anweisung nur einmal angegeben werden. Beim Angeben einer Option, die es schon einmal gibt, wird ein Fehler ausgelöst.

Sie können bis zu 249 räumliche Indizes für jede räumliche Spalte in einer Tabelle erstellen. Es kann sich als nützlich erweisen, mehrere räumliche Indizes für bestimmte räumliche Spalten zu erstellen, z. B. zum Indizieren verschiedener Mosaikparameter in einer Spalte.

Wichtig

Die Erstellung von räumlichen Indizes unterliegt einigen weiteren Einschränkungen. Weitere Informationen finden Sie unter Übersicht über räumliche Indizes.

Bei der Indexerstellung kann eine verfügbare Prozessparallelität nicht genutzt werden.

Von räumlichen Indizes unterstützte Methoden

Unter bestimmten Bedingungen unterstützen räumliche Indizes eine Reihe von mengenorientierten Geometriemethoden. Weitere Informationen finden Sie unter Übersicht über räumliche Indizes.

Räumliche Indizes und Partitionierung

Standardmäßig wird beim Erstellen eines räumlichen Indexes für eine partitionierte Tabelle der Index in Übereinstimmung mit dem Partitionsschema der Tabelle partitioniert. So kann sichergestellt werden, dass Indexdaten und die zugehörige Zeile in der gleichen Partition gespeichert werden.

In diesem Fall müssen Sie, um das Partitionsschema der Basistabelle zu ändern, den räumlichen Index löschen, bevor Sie die Basistabelle neu partitionieren können. Diese Einschränkung kann umgangen werden, indem Sie beim Erstellen eines räumlichen Indexes die "ON filegroup"-Option angeben. Weitere Informationen finden Sie nachfolgend unter "Räumliche Indizes und Dateigruppen".

Räumliche Indizes und Dateigruppen

Standardmäßig werden räumliche Indizes in die gleichen Dateigruppen wie die Tabelle partitioniert, für die der Index angegeben wird. Dies kann durch Angabe der Dateigruppe überschrieben werden:

[ ON { filegroup_name | "default" } ]
Wenn Sie eine Dateigruppe für einen räumlichen Index angeben, wird der Index unabhängig vom Partitionierungsschema der Tabelle in dieser Dateigruppe platziert.

Katalogsichten für räumliche Indizes

Die folgenden Katalogsichten sind für räumliche Indizes spezifisch:

sys.spatial_indexes
Stellt die wichtigsten Indexinformationen der räumlichen Indizes dar.

sys.spatial_index_tessellations
Stellt die Informationen zum Mosaikschema und zu den Parametern jedes räumlichen Indexes dar.

Zusätzliche Hinweise zum Erstellen von Indizes

Weitere Informationen zum Erstellen von Indizes finden Sie in den Hinweisen unter CREATE INDEX (Transact-SQL).

Berechtigungen

Der Benutzer muss über die ALTER-Berechtigung für die Tabelle oder Sicht verfügen, oder Mitglied der festen sysadmin-Serverrolle oder der festen Datenbankrollen db_ddladmin und db_owner sein.

Beispiele

A. Erstellen eines räumlichen Indexes für eine geometry-Spalte

Im folgenden Beispiel wird eine Tabelle namens SpatialTable erstellt, die eine Spalte vom Typ geometry aufweist, nämlich geometry_col. Dann wird ein räumlicher Index, SIndx_SpatialTable_geometry_col1, für geometry_col erstellt. Im Beispiel wird das Standardmosaikschema verwendet und das umgebende Feld angegeben.

CREATE TABLE SpatialTable(id int primary key, geometry_col geometry);  
CREATE SPATIAL INDEX SIndx_SpatialTable_geometry_col1
   ON SpatialTable(geometry_col)  
   WITH ( BOUNDING_BOX = ( 0, 0, 500, 200 ) );  

B. Erstellen eines räumlichen Indexes für eine geometry-Spalte

Im folgenden Beispiel wird ein zweiter räumlicher Index, SIndx_SpatialTable_geometry_col2, für geometry_col in der Tabelle SpatialTable erstellt. Im Beispiel wird GEOMETRY_GRID als Mosaikschema angegeben. Im Beispiel werden auch das umgebende Feld, unterschiedliche Dichten auf verschiedenen Ebenen und 64 Zellen pro Objekt angegeben. Zudem wird die Auffüllung von Indizes auf ON festgelegt.

CREATE SPATIAL INDEX SIndx_SpatialTable_geometry_col2  
   ON SpatialTable(geometry_col)  
   USING GEOMETRY_GRID  
   WITH (  
    BOUNDING_BOX = ( xmin=0, ymin=0, xmax=500, ymax=200 ),  
    GRIDS = (LOW, LOW, MEDIUM, HIGH),  
    CELLS_PER_OBJECT = 64,  
    PAD_INDEX  = ON );  

C. Erstellen eines räumlichen Indexes für eine geometry-Spalte

Im folgenden Beispiel wird ein dritter räumlicher Index, SIndx_SpatialTable_geometry_col3, für geometry_col in der Tabelle SpatialTable erstellt. Im Beispiel wird das Standardmosaikschema verwendet. Im Beispiel wird das umgebende Feld angegeben, und es werden unterschiedliche Zelldichten auf der dritten und vierten Ebene, aber die vorgegebene Anzahl von Zellen pro Objekt verwendet.

CREATE SPATIAL INDEX SIndx_SpatialTable_geometry_col3  
   ON SpatialTable(geometry_col)  
   WITH (  
    BOUNDING_BOX = ( 0, 0, 500, 200 ),  
    GRIDS = ( LEVEL_4 = HIGH, LEVEL_3 = MEDIUM ) );  

D: Ändern einer für räumliche Indizes spezifischen Option

Im folgenden Beispiel wird der räumliche Index neu erstellt, der im vorherigen Beispiel erstellt wurde, nämlich SIndx_SpatialTable_geography_col3. Zu diesem Zweck wird eine neue Dichte für LEVEL_3 mit DROP_EXISTING = ON angegeben.

CREATE SPATIAL INDEX SIndx_SpatialTable_geography_col3  
   ON SpatialTable(geography_col)  
   WITH ( BOUNDING_BOX = ( 0, 0, 500, 200 ),  
        GRIDS = ( LEVEL_3 = LOW ),  
        DROP_EXISTING = ON );  

E. Erstellen eines räumlichen Indexes für eine geography-Spalte

Im folgenden Beispiel wird eine Tabelle namens SpatialTable2 erstellt, die eine Spalte vom Typ geography aufweist, nämlich geography_col. Dann wird ein räumlicher Index, SIndx_SpatialTable_geography_col1, für geography_col erstellt. Im Beispiel werden die Standardparameterwerte des Mosaikschemas GEOGRAPHY_AUTO_GRID verwendet.

CREATE TABLE SpatialTable2(id int primary key, object GEOGRAPHY);  
CREATE SPATIAL INDEX SIndx_SpatialTable_geography_col1
   ON SpatialTable2(object);  

Hinweis

Für Geografierasterindizes kann kein Begrenzungsrahmen angegeben werden.

F. Erstellen eines räumlichen Indexes für eine geography-Spalte

Im folgenden Beispiel wird ein zweiter räumlicher Index, SIndx_SpatialTable_geography_col2, für geography_col in der Tabelle SpatialTable2 erstellt. Im Beispiel wird GEOGRAPHY_GRID als Mosaikschema angegeben. Im Beispiel werden auch unterschiedliche Rasterdichten auf verschiedenen Ebenen und 64 Zellen pro Objekt angegeben. Zudem wird die Auffüllung von Indizes auf ON festgelegt.

CREATE SPATIAL INDEX SIndx_SpatialTable_geography_col2  
   ON SpatialTable2(object)  
   USING GEOGRAPHY_GRID  
   WITH (  
    GRIDS = (MEDIUM, LOW, MEDIUM, HIGH ),  
    CELLS_PER_OBJECT = 64,  
    PAD_INDEX  = ON );  

G. Erstellen eines räumlichen Indexes für eine geography-Spalte

Im folgenden Beispiel wird dann ein dritter räumlicher Index, SIndx_SpatialTable_geography_col3, für geography_col in der Tabelle SpatialTable2 erstellt. Im Beispiel werden das Standardmosaikschema GEOGRAPHY_GRID und der Standardwert für CELLS_PER_OBJECT (16) verwendet.

CREATE SPATIAL INDEX SIndx_SpatialTable_geography_col3  
   ON SpatialTable2(object)  
   WITH ( GRIDS = ( LEVEL_3 = HIGH, LEVEL_2 = HIGH ) );  

Weitere Informationen

ALTER INDEX (Transact-SQL)
CREATE INDEX (Transact-SQL)
CREATE PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME (Transact-SQL)
CREATE STATISTICS (Transact-SQL)
CREATE TABLE (Transact-SQL)
Datentypen (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP INDEX (Transact-SQL)
EVENTDATA (Transact-SQL)
sys.index_columns (Transact-SQL)
sys.indexes (Transact-SQL)
sys.spatial_index_tessellations (Transact-SQL)
sys.spatial_indexes (Transact-SQL)
Übersicht über räumliche Indizes