快速了解MySQL索引(什么是索引,分类)

一、索引的本质与核心作用

1.定义

索引是数据库中加速查询的特殊数据结构,类比书籍的目录,通过在表的列上创建索引,能快速定位数据行,避免全表扫描。

2.核心作用

  • 提升查询效率:这是最核心的作用,大幅减少数据库检索数据的IO操作。
  • 保证数据唯一性:如主键索引、唯一索引可约束字段值的唯一性。
  • 优化排序/分组:索引的有序性可减少查询中排序( ORDER BY )、分组( GROUP BY )的计算量。

二、索引的分类

索引类型 定义 核心特点 适用场景 举例
主键索引 基于主键字段创建的索引 自动创建、唯一、不允许为空 表的唯一标识字段 用户表(user)的id字段,唯一标识每个用户
唯一索引 确保索引列值唯一 防止重复,允许一个空值 需唯一约束但非主键的字段 用户表的phone字段,避免重复手机号
普通索引 基础的查询加速索引 无唯一性限制,可建在任意列 普通查询的非唯一字段 商品表的category字段,按分类查商品
全文索引 用于全文搜索的索引 支持复杂文本检索,适配大文本 长文本字段的模糊/关键词搜索 文章表的content字段,搜索包含"数据库"的文章
复合索引 基于多个列创建的索引 加速多列联合查询 多字段组合查询的场景 订单表的 user_id + create_time,按用户 + 时间查订单

三、索引的使用方法(以MySQL为例)

1.创建索引

sql 复制代码
-- 主键索引(建表时自动创建,也可手动指定)
CREATE TABLE user (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(20)
);

-- 唯一索引
CREATE UNIQUE INDEX idx_user_phone ON user(phone);

-- 普通索引
CREATE INDEX idx_goods_category ON goods(category);

-- 全文索引(仅MyISAM/InnoDB 5.6+支持)
CREATE FULLTEXT INDEX idx_article_content ON article(content);

-- 复合索引
CREATE INDEX idx_order_user_time ON `order`(user_id, create_time);

2.删除索引

sql 复制代码
DROP INDEX idx_user_phone ON user;

四、索引的优缺点

优点

  1. 查询提速:针对大规模数据,能将查询效率从O(n)降至O(log n)(B+树索引)。
  2. 数据约束:主键/唯一索引可保证数据完整性,避免重复值。
  3. 减少IO:通过索引定位数据,减少磁盘的物理读写次数。

缺点

  1. 写入性能下降:新增、修改、删除数据时,需同步维护索引结构,额外消耗资源。
  2. 占用存储空间:索引是独立的数据结构,会占用数据库的磁盘空间(如B+树索引的叶节点/非叶节点存储)。
  3. 维护成本高:过多索引会增加数据库的维护负担,且复合索引需遵循"最左匹配原则",使用不当会失效。

五、索引使用的关键注意事项

  1. 避免过度建索引:仅在常用查询字段上创建,非查询字段无需建索引。
  2. 复合索引遵循最左匹配:如 (a,b,c) 的索引,仅 a 、 a+b 、 a+b+c 的查询能命中, b 、 c 单独查询则失效。
  3. 小表无需建索引:数据量少时,全表扫描的效率可能高于索引查询。
  4. 更新频繁的字段慎建索引:如订单状态字段,频繁修改会导致索引频繁维护,抵消查询收益。
相关推荐
bjzhang752 小时前
CentOS下安装MySQL详解
linux·mysql·centos
十五年专注C++开发4 小时前
MySql中各种功能用sql语句实现总结
数据库·sql·mysql
ULIi096kr6 小时前
MySQL解决Too many connections报错:连接数爆满排查、优化与永久解决方案
数据库·mysql·adb
李白的天不白6 小时前
服务器上数据库的创建
mysql
ha_lydms6 小时前
AnalyticDB基本概念
mysql·adb·analyticdb
Fanta丶7 小时前
23.MySql group by优化、limit优化、 count优化、update优化
mysql
医疗信息化王工7 小时前
医院自律端系统——预警处置模块全栈实战(ASP.NET Core + Vue3 + Quartz 定时调度)
mysql·postgresql·vue·asp.net core·quartz
NineData7 小时前
SQL 都在等锁时,ChatDBA 先帮 MySQL 找到谁在挡路
数据库·人工智能·sql·mysql·安全·数据复制·数据迁移工具
神仙别闹7 小时前
基于 PHP + MySQL学生信息管理系统
android·mysql·php
Amnesia0_08 小时前
MYSQL复合查询和内外连接
数据库·mysql