Advanced Types of Indexes in MySQL

Introduction

  • Overview
    • Importance of indexes in database performance.
    • Types of indexes available in MySQL.

 

  • Objective
    • Provide an in-depth understanding of different types of indexes.
    • Present complex examples to illustrate usage and benefits.

Primary Key Index

  • Definition:
    • A unique identifier for each record in a table.
  • Characteristics:
    • Automatically creates a clustered index.
    • Ensures data integrity by preventing duplicate entries.
  • Example:
CREATE TABLE employees (
    id INT AUTO_INCREMENT,
    lastname VARCHAR(255),
    PRIMARY KEY (id)
);

SELECT * FROM employees where id = 1;

Unique Index

  • Definition:
    • Ensures all values in the indexed column are unique.
  • Characteristics:
    • Allows NULL values (only one per column)
CREATE UNIQUE INDEX idx_unique_email ON employees (email);
  •  Complex Use Case:
    • Unique composite index to ensure a combination of two columns is unique.
CREATE TABLE user_roles (
    user_id INT,
    role_id INT,
    UNIQUE INDEX unique_user_role (user_id, role_id)
);

Regular (Non-Unique) Index

  • Definition:
    • Speeds up data retrieval without enforcing uniqueness.
  • Characteristics:
    • Can have duplicate values
CREATE INDEX idx_lastname ON employees (lastname);
  •  Complex Use Case:
    • Using a multi-column index to optimize queries with multiple conditions.
CREATE INDEX idx_name_dob ON employees (lastname, firstname, dob);

Full-Text Index

  • Definition:
    • Used for full-text searches in text-based columns.
  • Characteristics:
    • Suitable for columns with large text data.
CREATE FULLTEXT INDEX idx_content ON articles (content);
  •  Complex Use Case:
    • Full-text search with boolean mode for advanced querying.
SELECT * FROM articles
WHERE MATCH (content) AGAINST ('+MySQL -index' IN BOOLEAN MODE);

Spatial Index

  • Definition:
    • Used for indexing spatial data types (e.g., geometries).
  • Characteristics:
    • Suitable for columns with large text data.
CREATE TABLE locations (
    id INT AUTO_INCREMENT PRIMARY KEY,
    place POINT,
    SPATIAL INDEX (place)
);
  •  Complex Use Case:
    • Finding nearest locations using spatial functions.
SELECT id, place, ST_Distance_Sphere(place, POINT(1.0, 1.0)) as distance
FROM locations
WHERE ST_Distance_Sphere(place, POINT(1.0, 1.0)) < 10000
ORDER BY distance;

Composite Index

  • Definition:
    • An index on multiple columns.
  • Characteristics:
    • Speeds up queries that filter on multiple columns.
CREATE INDEX idx_fullname ON employees (lastname, firstname);
  •  Complex Use Case:
    • Optimizing queries with sorting and filtering on indexed columns.
CREATE INDEX idx_multi ON orders (customer_id, order_date, status);

SELECT * FROM orders
WHERE customer_id = 123 AND status = 'shipped'
ORDER BY order_date DESC;

Using EXPLAIN for Index Analysis

  • Definition:
    • Analyzes how MySQL executes a query and uses indexes.
EXPLAIN SELECT * FROM employees WHERE lastname = 'Smith';
  •  Complex Analysis:
    • Using EXPLAIN to diagnose index usage and optimize queries
EXPLAIN SELECT * FROM orders
WHERE customer_id = 123 AND status = 'shipped'
ORDER BY order_date DESC;

Maintaining Indexes

  • Monitoring Index Usage:
    • Regularly analyze index effectiveness with SHOW INDEX and ANALYZE TABLE.
SHOW INDEX FROM employees;
ANALYZE TABLE employees;
  •  Rebuilding and Dropping Indexes:
    • Optimize fragmented indexes and remove unused indexes.
OPTIMIZE TABLE employees;
DROP INDEX idx_lastname ON employees;

Impact of Indexes on Performance

  • Positive Impacts:
    • Faster query execution.
    • Reduced I/O operations
    • Efficient data retrieval.
  •  Negative Impacts:
    • Increased storage requirements.
    • Slower write operations (INSERT, UPDATE, DELETE).
    • Maintenance overhead.

Best Practices for Indexing

  • Choosing the Right Columns:
    • Index columns used in WHERE, JOIN, ORDER BY, and GROUP BY clauses.
  •  Index Selectivity:
    • High selectivity indexes (unique values) are more efficient.
  •  Combining Indexes:
    • Use composite indexes for multi-column searches.
CREATE INDEX idx_combined ON sales (product_id, sale_date, region);
  •  Avoid Over-Indexing:
    • Too many indexes can degrade performance.
    • Regularly review and optimize indexes.

Conclusion

  • Summary of Key Points:
    • Understanding different types of indexes and their use cases.
    • Best practices for creating and maintaining indexes.
    • Analyzing and optimizing query performance with indexes.
  • Final Thoughts:
    • Effective indexing is crucial for database performance.
    • Regularly monitor and maintain indexes for optimal results.

Q&A

  • Questions from the audience