Indexes

What are Indexes

Indexes in MySQL are data structures used to improve the speed of data retrieval operations on database tables. They work like an index in a book, helping MySQL quickly locate the desired rows without having to scan the entire table. Indexes consume additional disk space but significantly improve query performance by creating shortcuts to data. They are essential for optimizing database performance, especially for large tables with frequent read operations.


Types of Indexes

Create Primary Index

ALTER TABLE $TABEL_NAME ADD PRIMARY KEY (column_name);

Create Unique Index

CREATE UNIQUE INDEX index_name ON $TABEL_NAME (column_name);

Create Composite Index

CREATE INDEX index_name ON $TABEL_NAME (column1, column2);

Create Partial Index

CREATE INDEX index_name ON $TABEL_NAME (column_name(10));

Create Full-text Index

CREATE FULLTEXT INDEX index_name ON $TABEL_NAME (column_name);

Creating and Dropping Indexes

Create Index

CREATE INDEX index_name ON $TABEL_NAME (column_name);

Create Index with Algorithm

CREATE INDEX index_name ON $TABEL_NAME (column_name) ALGORITHM=INPLACE;

Show Indexes

SHOW INDEX FROM $TABEL_NAME;

Show Create Table (includes indexes)

SHOW CREATE TABLE $TABEL_NAME;

Drop Index

DROP INDEX index_name ON $TABEL_NAME;

Alternative Drop Syntax

ALTER TABLE $TABEL_NAME DROP INDEX index_name;

Check Index Usage

EXPLAIN SELECT * FROM $TABEL_NAME WHERE column_name = 'value';

Performance Considerations

Analyze Table Performance

ANALYZE TABLE $TABEL_NAME;

Check Index Statistics

SELECT * FROM information_schema.statistics 
WHERE $TABEL_NAME = 'your_table_name';

Monitor Index Usage

SELECT * FROM performance_schema.table_io_waits_summary_by_index_usage 
WHERE object_schema = 'your_database';

Force Index Usage

SELECT * FROM $TABEL_NAME FORCE INDEX (index_name) WHERE column_name = 'value';

Ignore Index

SELECT * FROM table_name IGNORE INDEX (index_name) WHERE column_name = 'value';

Views

Create View

CREATE VIEW view_name AS
SELECT column1, column2
FROM $TABEL_NAME
WHERE condition;

Create or Replace View

CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2
FROM $TABEL_NAME
WHERE condition;

Select from View

SELECT * FROM view_name;

Show Views

SHOW FULL TABLES WHERE Table_type = 'VIEW';

Drop View

DROP VIEW view_name;

Alter View

ALTER VIEW view_name AS
SELECT column1, column2, column3
FROM $TABEL_NAME
WHERE condition;

View Information

SHOW CREATE VIEW view_name;

Stored Procedures and Functions

Create Stored Procedure

DELIMITER //
CREATE PROCEDURE procedure_name(IN param1 INT, OUT param2 VARCHAR(50))
BEGIN
    -- procedure body
    SELECT column1 INTO param2 FROM $TABEL_NAME WHERE id = param1;
END //
DELIMITER ;

Call Stored Procedure

CALL procedure_name(value1, @output_var);

Create Function

DELIMITER //
CREATE FUNCTION function_name(param1 INT) RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE result INT;
    SELECT COUNT(*) INTO result FROM $TABEL_NAME WHERE id = param1;
    RETURN result;
END //
DELIMITER ;

Last updated