Skip to main content
Documents
Clauses StatementsKeywordsExpressionsFunctionsIndexesPerformance Optimization

MySQL CREATE INDEX Statement

The `CREATE INDEX` statement in MySQL is used to create an index on a table's column(s) to enhance the speed of query retrieval. Indexes are critical for optimizing database performance, especially when dealing with large datasets.

Usage

The `CREATE INDEX` statement is used when you need to improve the performance of data retrieval operations. It is particularly useful for speeding up `SELECT` queries that filter or sort data.

CREATE INDEX index_name
ON table_name (column1, column2, ...);

In this syntax, `CREATE INDEX` defines the index name and specifies the table and columns on which the index is created.

Examples

1. Basic Index Creation

CREATE INDEX idx_lastname
ON employees (last_name);

This example creates an index named `idx_lastname` on the `last_name` column of the `employees` table, optimizing queries that filter by last names.

2. Composite Index

CREATE INDEX idx_name_dob
ON employees (last_name, birth_date);

This syntax demonstrates creating a composite index on both `last_name` and `birth_date`, useful for queries filtering by both columns.

3. Unique Index

CREATE UNIQUE INDEX idx_email
ON users (email);

This example creates a unique index on the `email` column of the `users` table to ensure that all email entries are unique and to speed up searches by email.

4. Fulltext Index

CREATE FULLTEXT INDEX idx_content
ON articles (content);

This example creates a `FULLTEXT` index on the `content` column of the `articles` table, which is useful for full-text searches.

5. Spatial Index

CREATE SPATIAL INDEX idx_location
ON locations (geo_point);

This creates a `SPATIAL` index on the `geo_point` column of the `locations` table, beneficial for geographic data types.

Tips and Best Practices

  • Index selectively. Create indexes only on columns that are frequently searched or sorted to avoid unnecessary overhead.
  • Monitor performance. Use the `EXPLAIN` statement to assess query performance and determine if an index is beneficial.
  • Consider index type. Choose the appropriate index type (e.g., unique, full-text, spatial) based on your data and query needs.
  • Balance between read and write. Be aware that while indexes speed up reads, they can slow down write operations (INSERT, UPDATE, DELETE).
  • Internal workings. Most indexes use B-tree structures to maintain sorted data, facilitating quick lookups.
  • Limitations. Understand the limitations such as maximum number of indexes per table or maximum size of index keys.
  • Naming conventions. Use clear and descriptive names for indexes to maintain readability, like prefixing with `idx_`.
  • Manageability. Regularly review and manage indexes using `ALTER TABLE` to modify and `DROP INDEX` to remove unnecessary indexes.

Managing and Removing Indexes

To modify an index, you can use the `ALTER TABLE` statement. To remove an index, the `DROP INDEX` statement is used, as shown below:

DROP INDEX idx_lastname ON employees;

Considerations

  • Primary Key vs. Unique Index. A primary key is a constraint ensuring unique values and non-nullability, while a unique index only enforces uniqueness.
  • Low Cardinality Columns. Avoid indexing columns with low cardinality, as they may not provide significant performance benefits.
  • Small Tables. Indexes on very small tables might not yield noticeable performance improvements due to the overhead of maintaining the index.

SQL Upskilling for Beginners

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