在使用数据库时,数据量一多,查询速度就会变慢。比如你在公司系统里查一个客户信息,点一下要等好几秒,这时候很可能是因为缺少索引。给字段加上索引,就像给书加了目录,查起来就快多了。
什么是索引?
索引是数据库中一种提升查询效率的数据结构。它不改变数据本身,而是记录某个字段的值和对应数据行的位置,让数据库能快速定位到目标数据。
创建索引的基本语法
在 MySQL 中,最常见的创建索引语句是使用 CREATE INDEX 命令。语法如下:
CREATE INDEX 索引名 ON 表名 (字段名 [(长度)]);
比如你有一张用户表 user_info,想对用户的手机号 mobile 字段建索引,可以这样写:
CREATE INDEX idx_mobile ON user_info (mobile);
这里 idx_mobile 是你给索引起的名字,建议有规律,方便后期维护。
对字符串前缀建索引
如果字段是较长的字符串,比如地址或描述,没必要对整个字段建索引,可以只取前几位。例如对用户名 username 的前8位建索引:
CREATE INDEX idx_username ON user_info (username(8));
这样既能节省空间,又能提高查询效率。
唯一索引怎么写?
有些字段要求不能重复,比如身份证号、邮箱。这时应该创建唯一索引,防止重复数据插入:
CREATE UNIQUE INDEX idx_email ON user_info (email);
一旦有重复值尝试插入,数据库会直接报错。
主键和索引的关系
主键(PRIMARY KEY)本身就是一种特殊的唯一索引,而且不允许为空。当你设定了主键,数据库会自动为它创建索引,不需要再手动添加。
联合索引怎么写?
有时候需要多个字段一起查,比如按省份和城市筛选用户。这时可以创建联合索引:
CREATE INDEX idx_province_city ON user_info (province, city);
注意顺序:查询条件中必须包含前面的字段,索引才有效。比如只查 city 可能用不上这个索引。
什么时候该建索引?
经常出现在 WHERE 条件里的字段,比如 status、create_time;用于排序 ORDER BY 或分组 GROUP BY 的字段,也适合建索引。
但不是越多越好。每加一个索引,插入、更新数据时都会变慢,因为索引也要同步更新。所以只给真正需要的字段加。
查看已有索引
想知道一张表有哪些索引,可以用这条命令:
SHOW INDEX FROM 表名;
执行后会列出所有索引名称、字段、类型等信息,方便你判断是否需要调整。
删除索引
如果某个索引没用了,可以删掉,释放空间:
DROP INDEX 索引名 ON 表名;
比如删掉之前建的手机号索引:
DROP INDEX idx_mobile ON user_info;