数据库索引
1. 什么是索引?
索引是数据库中用于加速数据检索的数据结构,类似于书籍的目录。通过索引,MySQL 可以更快地定位到需要的数据行,避免全表扫描。
2. 如何使用索引?
创建索引:
在创建表时添加索引:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100),
INDEX idx_name (name)
);
在已有表上添加索引:
CREATE INDEX idx_email ON users(email);
删除索引:
DROP INDEX idx_col ON 表名;
查看索引:
SHOW INDEX FROM 表名;
创建唯一索引(防止重复):
CREATE UNIQUE INDEX idx_unique_col ON 表名(列名);
3. 什么时候需要索引?
- 作为查询条件(WHERE)、排序(ORDER BY)、分组(GROUP BY)、连接(JOIN)等操作频繁的字段
- 需要保证唯一性的字段(如主键、唯一约束)
- 需要加速多表连接的字段
4. 索引的影响
优点:
- 显著提升查询速度
- 加速排序、分组和多表连接
- 保证数据唯一性(唯一索引)
缺点:
- 占用磁盘空间
- 插入、更新、删除时需要维护索引,写入性能会降低
- 索引过多会影响优化器选择,反而可能降低查询效率
5. 一个表能添加多少索引?
在 MySQL InnoDB 存储引擎下,一个表最多可以有 64 个二级索引(不包括主键索引)。但实际开发中建议根据业务需求合理设置索引数量,避免过多冗余索引。
MySQL默认创建索引的行为
在MySQL中,部分情况下数据库会自动为表创建索引,无需用户手动指定。主要包括以下几种情况:
- 主键(PRIMARY KEY)
当你在表结构中定义主键时,MySQL会自动为主键字段创建唯一索引。主键索引保证每一行数据的唯一性,并且加速主键字段的查询。 - 唯一约束(UNIQUE)
如果你为某个字段或字段组合添加了唯一约束(UNIQUE),MySQL会自动为该字段创建唯一索引,用于保证数据的唯一性。 - 外键(FOREIGN KEY)
在InnoDB存储引擎下,如果你为某个字段添加了外键约束,而该字段没有索引,MySQL会自动为该字段创建普通索引,以保证外键约束的有效性和查询效率。 - 部分存储引擎的自增主键
如InnoDB表未指定主键,且存在唯一非空索引,则该唯一索引会被用作主键索引;如果没有任何唯一索引,InnoDB会自动生成一个隐藏的自增主键索引。
示例:
CREATE TABLE orders (
order_id INT PRIMARY KEY, -- 自动创建主键索引
user_id INT UNIQUE, -- 自动创建唯一索引
product_id INT,
FOREIGN KEY (product_id) REFERENCES products(id) -- 自动为product_id创建普通索引(如无)
);
总结
索引是提升 MySQL 查询性能的重要工具,但并不是越多越好。应根据实际查询需求合理设计索引,定期分析和优化索引结构,避免冗余和无效索引。
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
全部评论 2
牧天白衣
Google Chrome Windows 10木灵鱼儿
FireFox Windows 10