Skip to main content
Documents
Share
LinkedIn
Facebook
Twitter
Copy
ClausesStatementsKeywordsExpressionsFunctions

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.