MySQL 中的索引数量是否越多越好?

不是越多越好,我们要根据实际需要来增加索引。InnoDB 中每创建一个索引,就会多维护一个B+树结构。索引的目的是为我们带来查询效率上的提高。如果不是频繁使用的查询字段,没有必要创建索引。

增加索引带来的问题
  1. 需要的磁盘存储空间增大,增加了一个B+树结构
  2. 影响缓冲池的命中率,对表进行操作的时候,索引数据也会加载到内存中,索引数据占用了内存,表数据就会相应的变少了,缓冲池的命中率降低
  3. 增删改的效率会降低,在索引存在时,每个涉及索引的操作都需要对索引数据进行维护
  4. 索引的命中会带来不确定性,可能会命中了一个不是最优的索引

如果不能带来查询效率上的提高,创建索引就没有必要

创建索引的依据
  1. 需要作为查询条件频繁查询的字段,经常在 order by 、group by 、 distinct 后面的字段也可以建立索引
  2. 字段的值增加索引后可以大规模的加快查询效率,要使用高选择性的字段作为索引。类似性别字段,没必要创建索引
  3. 减少回表,如果经常性使用查询条件 field1=value1 去查询 field2,可以使用 field1,field2 创建联合索引
  4. 复合索引,多个字段一起查询,可以创建复合索引,提升查询效率
相关推荐
极限实验室6 小时前
APM(一):Skywalking 与 Easyearch 集成
数据库·云原生
饕餮争锋6 小时前
SQL条件中WHERE 1=1 的功能
数据库·sql
玄斎7 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
编织幻境的妖7 小时前
SQL查询连续登录用户方法详解
java·数据库·sql
编程小Y7 小时前
MySQL 与 MCP 集成全解析(核心原理 + 实战步骤 + 应用场景)
数据库·mysql·adb
零度@8 小时前
SQL 调优全解:从 20 秒到 200 ms 的 6 步实战笔记(附脚本)
数据库·笔记·sql
Miss_Chenzr8 小时前
Springboot优卖电商系统s7zmj(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
lvbinemail8 小时前
Grafana模板自动复制图表
数据库·mysql·zabbix·grafana·监控
Miss_Chenzr8 小时前
Springboot旅游景区管理系统9fu3n(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·旅游
小虾米vivian8 小时前
dmetl5 运行失败,提示违反协议?
数据库·达梦数据库