【MySQL-索引调优】02:单列索引

1-问题

查询:

sql 复制代码
EXPLAIN SELECT * FROM orders WHERE user_id = 1234;

发现:

id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE orders ALL 99520 10 Using where

分析:

  • select_type = SIMPLE:说明这是一个简单查询,没有子查询或UNION

  • table = orders :查询的表就是orders

  • partitions = NULL:没有分区

  • type = ALL这是最关键的,表示执行计划是 全表扫描。也就是说它没有用索引,而是把整张表都扫一遍

  • possible_keys = NULL:没有可用的索引

  • key = NULL关键,实际使用的索引也是空的,说明没有用索引

  • key_len = NULL:索引长度为空

  • ref = NULL:没有引用索引

  • rows = 99520关键,预估需要扫描大约 99,520 行数据

  • filtered = 10:表示大约只有 10% 的数据符合条件

  • Extra = Using where :说明是靠WHERE user_id = 1234这个条件来过滤

查询在orders表上做了全表扫描 ,效率比较低。如果orders表很大,性能会很差。原因是user_id字段没有索引,所以数据库只能把整张表读一遍再过滤

2-优化

  • 执行计划显示 type = ALL,也就是全表扫描
  • possible_keys = NULL,说明数据库认为没有合适的索引可以用
  • 查询条件是WHERE user_id = 1234`

可以新增user_id索引,提高查询速度

sql 复制代码
# 新增索引
CREATE INDEX idx_user_id ON orders(user_id);
# 再次运行
EXPLAIN SELECT * FROM orders WHERE user_id = 1234;

结果为:

id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE orders ref idx_user_id idx_user_id 9 const 8 100

分析:

  • type = ref :这表示查询使用了非唯一索引(普通索引),通过索引来定位行,而不是全表扫描。相比之前的ALL,性能提升很大

  • possible_keys = idx_user_id :数据库识别到可以用idx_user_id这个索引

  • key = idx_user_id :实际使用的索引就是你刚建的idx_user_id

  • key_len = 9 :索引字段的长度(这里是user_id的存储长度)

  • ref = const :说明查询条件是一个常量(user_id = 1234),直接用这个值去索引里查

  • rows = 8:数据库预估只需要扫描大约8行,而不是之前的99,520行

  • filtered = 100:表示这些行几乎全部符合条件

相关推荐
rising start5 小时前
二、全面理解MySQL架构
mysql·架构
星星也在雾里6 小时前
PgBouncer 解决 PostgreSQL 连接数超限 + 可视化监控
数据库·postgresql
bqq198610266 小时前
MySQL性能优化
mysql·mysql优化
雨辰AI7 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
长城20247 小时前
关于MySql的ONLY_FULL_GROUP_BY问题
数据库·mysql·聚合列
常常有8 小时前
MySQL 底层执行原理:输入SQL语句到两阶段提交
数据库·sql·mysql
Mr. zhihao8 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
m0_748839498 小时前
利用天正暖通CAD快速掌握风管数量统计的方法
数据库
随身数智备忘录8 小时前
什么是设备管理体系?设备管理体系包含哪些核心模块?
网络·数据库·人工智能
海市公约9 小时前
MySQL更新语句执行全流程:从Buffer Pool修改到二阶段提交
数据库·mysql·binlog·innodb·undo log·二阶段提交·update执行原理