深入浅出 MySQL索引类型与实战详解:原理、分类、应用与优化

索引的主要作用

  1. WHERE查询:通过索引可以快速定位符合条件的数据行
  2. ORDER BY排序:利用索引的有序性直接获取排序结果

索引类型分类

按存储结构划分

  1. BTree索引:最常见的索引类型
  2. Hash索引:适用于等值查询
  3. FULLTEXT索引:用于全文搜索
  4. RTree索引:用于空间数据索引

按应用层划分

  1. 普通索引:最基本的索引类型
  2. 唯一索引:要求索引列的值必须唯一
  3. 主键索引:特殊的唯一索引,不允许NULL值
  4. 复合索引:在多个列上建立的索引

按数据存储划分

  1. 聚集索引(聚簇索引):叶子节点直接存储行数据
  2. 非聚集索引(非聚簇索引):叶子节点存储主键值

普通索引

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');