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中,部分情况下数据库会自动为表创建索引,无需用户手动指定。主要包括以下几种情况:

  1. 主键(PRIMARY KEY)
    当你在表结构中定义主键时,MySQL会自动为主键字段创建唯一索引。主键索引保证每一行数据的唯一性,并且加速主键字段的查询。
  2. 唯一约束(UNIQUE)
    如果你为某个字段或字段组合添加了唯一约束(UNIQUE),MySQL会自动为该字段创建唯一索引,用于保证数据的唯一性。
  3. 外键(FOREIGN KEY)
    在InnoDB存储引擎下,如果你为某个字段添加了外键约束,而该字段没有索引,MySQL会自动为该字段创建普通索引,以保证外键约束的有效性和查询效率。
  4. 部分存储引擎的自增主键
    如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 查询性能的重要工具,但并不是越多越好。应根据实际查询需求合理设计索引,定期分析和优化索引结构,避免冗余和无效索引。

分类: MySQL 标签: MySQL索引

评论

全部评论 2

  1. 牧天白衣
    牧天白衣
    Google Chrome Windows 10
    你好,请问这个typecho我图片复制粘贴不到编辑文章的地方,请问你知道怎么解决吗?[无语] 虽然跟这篇文章关系不大~
    1. 木灵鱼儿
      木灵鱼儿
      FireFox Windows 10
      @牧天白衣md又不是富文本,自己去学一下md的语法吧

目录