深入浅出 MySQL索引类型与实战详解:原理、分类、应用与优化
索引的主要作用
- WHERE查询:通过索引可以快速定位符合条件的数据行
- ORDER BY排序:利用索引的有序性直接获取排序结果
索引类型分类
按存储结构划分
- BTree索引:最常见的索引类型
- Hash索引:适用于等值查询
- FULLTEXT索引:用于全文搜索
- RTree索引:用于空间数据索引
按应用层划分
- 普通索引:最基本的索引类型
- 唯一索引:要求索引列的值必须唯一
- 主键索引:特殊的唯一索引,不允许NULL值
- 复合索引:在多个列上建立的索引
按数据存储划分
- 聚集索引(聚簇索引):叶子节点直接存储行数据
- 非聚集索引(非聚簇索引):叶子节点存储主键值
普通索引
CREATE INDEX index_name ON table_name(column_name);
ALTER TABLE table_name ADD INDEX index_name(column_name);
CREATE TABLE table_name (
column1 datatype,
INDEX index_name (column_name)
);
唯一索引
CREATE UNIQUE INDEX index_name ON table_name(column_name);
ALTER TABLE table_name ADD UNIQUE (column_name);
主键索引
CREATE TABLE users (
user_id INT NOT NULL,
PRIMARY KEY (user_id)
);
复合索引
CREATE INDEX idx_name ON table_name(column1, column2);
-- 最左前缀原则
SELECT * FROM table WHERE column1 = 'xxx';
SELECT * FROM table WHERE column1 = 'xxx' AND column2 = 'yyy';
全文索引
ALTER TABLE wzk_user ADD FULLTEXT INDEX ft_username (username);
SELECT * FROM wzk_user WHERE match(username) against('wzk');