Skip to main content
Documents
Clauses StatementsKeywordsExpressionsFunctionsIndexesPerformance Optimization

MySQL SPATIAL Indexes

SPATIAL indexes in MySQL are specialized indexes used to efficiently query spatial data types like geometries. These indexes are essential for operations involving geographical data, enabling fast retrieval and manipulation.

Usage

SPATIAL indexes are used when working with geometry data types to optimize spatial queries like ST_Intersects or ST_Within. They can only be created on columns of spatial data types and require tables to use the InnoDB storage engine, which is the default and preferred choice for new applications. The MyISAM engine, previously used, is not recommended for new applications.

CREATE SPATIAL INDEX index_name ON table_name (spatial_column);

This syntax defines a spatial index named index_name on the spatial_column of table_name.

Examples

1. Creating a SPATIAL Index

CREATE TABLE locations (
    id INT AUTO_INCREMENT PRIMARY KEY,
    coordinates POINT NOT NULL,
    SPATIAL INDEX(coordinates)
);

This example creates a table with a column coordinates of type POINT, and a SPATIAL index is created on this column to speed up spatial queries. Supported spatial data types also include LINESTRING and POLYGON.

2. Adding SPATIAL Index to an Existing Table

ALTER TABLE regions
ADD SPATIAL INDEX(region_shape);

Here, a SPATIAL index is added to the region_shape column of an existing regions table to enhance the performance of spatial operations without altering existing data.

3. Using SPATIAL Index in Queries

SELECT id
FROM locations
WHERE ST_Contains(GeomFromText('POLYGON((...))'), coordinates);

This example uses a SPATIAL index on the coordinates column to quickly find ids of locations contained within a specified polygon. The ST_Contains function checks if one geometry contains another.

Tips and Best Practices

  • Use with appropriate data types. Ensure columns indexed with SPATIAL are of supported spatial types like POINT, LINESTRING, or POLYGON.
  • Opt for the right storage engine. Use InnoDB as it is the preferred choice for SPATIAL indexes in newer MySQL versions. MyISAM is generally used for legacy reasons.
  • Combine with spatial functions. Leverage MySQL spatial functions like ST_Contains or ST_Intersects to fully utilize SPATIAL indexes.
  • Consider version context. SPATIAL indexes in InnoDB have been supported since MySQL 5.7.5, which is significant for those using older versions.
  • Be aware of practical limitations. Understand the maximum index size and potential performance implications when working with large spatial datasets.
  • Maintain your indexes. Regularly update statistics and rebuild indexes when necessary to ensure optimal performance.

SQL Upskilling for Beginners

Gain the SQL skills to interact with and query your data.
Start Learning for Free