MySQL kann raumbezogene Indizes mit einer ähnlichen Syntax
anlegen, wie sie auch für normale Indizes verwendet wird,
allerdings erweitert um das Schlüsselwort
SPATIAL
. Zurzeit müssen raumbezogene
Spalten, die indiziert werden, als NOT NULL
deklariert werden. Die folgenden Beispiele zeigen, wie man
raumbezogene Indizes anlegen kann:
Mit CREATE TABLE
:
CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g));
Mit ALTER TABLE
:
ALTER TABLE geom ADD SPATIAL INDEX(g);
Mit CREATE INDEX
:
CREATE SPATIAL INDEX sp_index ON geom (g);
Auf MyISAM
-Tabellen legt SPATIAL
INDEX
einen R-Tree-Index an, aber auf Tabellen mit
anderen Speicher-Engines, die raumbezogene Indizierung
unterstützen, erzeugt SPATIAL INDEX
einen
B-Tree-Index. Ein B-Tree-Index auf raumbezogenen Werten ist
nützlich für das Nachschlagen konkreter Werte, aber nicht für
Bereichsscans.
Gelöscht werden raumbezogene Indizes mit ALTER
TABLE
oder DROP INDEX
:
Mit ALTER TABLE
:
ALTER TABLE geom DROP INDEX g;
Mit DROP INDEX
:
DROP INDEX sp_index ON geom;
Beispiel: Angenommen, eine Tabelle namens
geom
enthält mehr als 32.000 Geometrien, die
alle in der Spalte g
vom Typ
GEOMETRY
gespeichert sind. Die Tabelle hat
außerdem eine AUTO_INCREMENT
-Spalte namens
fid
zum Speichern der Objekt-IDs.
mysql>DESCRIBE geom;
+-------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+----------------+ | fid | int(11) | | PRI | NULL | auto_increment | | g | geometry | | | | | +-------+----------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql>SELECT COUNT(*) FROM geom;
+----------+ | count(*) | +----------+ | 32376 | +----------+ 1 row in set (0.00 sec)
Mti folgender Anweisung definieren Sie einen raumbezogenen Index
auf der Spalte g
:
mysql> ALTER TABLE geom ADD SPATIAL INDEX(g);
Query OK, 32376 rows affected (4.05 sec)
Records: 32376 Duplicates: 0 Warnings: 0
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.