索引是数据库中用于加速查询操作的数据结构,类似于书籍的目录。MariaDB支持多种索引类型,合理使用索引可以显著提高查询性能。
最基本的索引类型,没有唯一性限制。
CREATE INDEX idx_name ON table_name(column_name);
确保索引列的值唯一,允许NULL值。
CREATE UNIQUE INDEX idx_name ON table_name(column_name);
特殊的唯一索引,不允许NULL值,每个表只能有一个主键。
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
用于全文搜索,适用于MyISAM和InnoDB存储引擎。
CREATE FULLTEXT INDEX idx_name ON table_name(column_name);
在多个列上创建的索引。
CREATE INDEX idx_name ON table_name(col1, col2, col3);
-- 创建表时添加索引
CREATE TABLE table_name (
id INT NOT NULL,
name VARCHAR(30) NOT NULL,
INDEX idx_name (name)
);
-- 在已有表上添加索引
CREATE INDEX idx_name ON table_name(column_name);
ALTER TABLE table_name ADD INDEX idx_name (column_name);
DROP INDEX idx_name ON table_name;
ALTER TABLE table_name DROP INDEX idx_name;
SHOW INDEX FROM table_name;
选择合适的列建立索引:
组合索引的列顺序:
避免过度索引:
避免在索引列上使用函数:
-- 不推荐,无法使用索引
SELECT * FROM table WHERE YEAR(date_column) = 2023;
-- 推荐
SELECT * FROM table WHERE date_column BETWEEN '2023-01-01' AND '2023-12-31';
使用EXPLAIN分析查询:
EXPLAIN SELECT * FROM table WHERE indexed_column = 'value';
-- 创建组合索引
CREATE INDEX idx_name_age ON employees(last_name, age);
-- 使用索引的查询
SELECT * FROM employees WHERE last_name = 'Smith' AND age = 30;
-- 使用EXPLAIN分析
EXPLAIN SELECT * FROM employees WHERE last_name = 'Smith';
通过合理设计和使用索引,可以显著提高MariaDB数据库的查询性能,但需要根据实际业务场景和数据特点进行权衡和优化。