索引类型:主键索引、唯一索引、普通索引、全文索引
引言 MySQL支持多种索引类型,每种有不同的特点和适用场景。 一、主键索引(PRIMARY KEY) 1.1 特点 唯一且非空 聚簇索引:数据和索引存在一起 每个表只能有一个主键 1.2 创建 -- 方式1:建表时指定 CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) ); -- 方式2:后续添加 ALTER TABLE users ADD PRIMARY KEY (id); 1.3 聚簇索引(Clustered Index) InnoDB的主键索引是聚簇索引: 叶子节点存储完整的数据行 表数据按主键顺序存储 B+树结构: [10, 20] / | \ [1→row] [10→row] [20→row] ← 叶子节点存完整数据 优势: 主键查询快(一次IO获取完整数据) 范围查询快(数据有序) 劣势: 主键不能太长(影响所有二级索引) 插入乱序会导致页分裂 二、唯一索引(UNIQUE INDEX) 2.1 特点 值必须唯一 允许NULL(但只能有一个NULL) 可以有多个唯一索引 2.2 创建 -- 方式1:建表时 CREATE TABLE users ( id INT PRIMARY KEY, email VARCHAR(100) UNIQUE ); -- 方式2:单独创建 CREATE UNIQUE INDEX idx_email ON users(email); -- 方式3:ALTER TABLE ALTER TABLE users ADD UNIQUE INDEX idx_email (email); 2.3 使用场景 -- 用户名、邮箱、手机号等唯一字段 CREATE UNIQUE INDEX idx_username ON users(username); CREATE UNIQUE INDEX idx_phone ON users(phone); 三、普通索引(NORMAL INDEX) 3.1 特点 最基本的索引 值可以重复 也称为二级索引(Secondary Index) 3.2 创建 -- 方式1:CREATE INDEX CREATE INDEX idx_name ON users(name); -- 方式2:ALTER TABLE ALTER TABLE users ADD INDEX idx_age (age); -- 方式3:建表时 CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50), INDEX idx_name (name) ); 3.3 二级索引(非聚簇索引) 存储结构: ...