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

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

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

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

创建索引的依据
  1. 需要作为查询条件频繁查询的字段,经常在 order by 、group by 、 distinct 后面的字段也可以建立索引
  2. 字段的值增加索引后可以大规模的加快查询效率,要使用高选择性的字段作为索引。类似性别字段,没必要创建索引
  3. 减少回表,如果经常性使用查询条件 field1=value1 去查询 field2,可以使用 field1,field2 创建联合索引
  4. 复合索引,多个字段一起查询,可以创建复合索引,提升查询效率
相关推荐
IvorySQL24 分钟前
PG 日报|优化缓冲区批量扫描,降低多套接字并发竞争
数据库·人工智能·postgresql·开源·区块链
这个DBA有点耶28 分钟前
交易型数据库是什么?OLTP核心能力与2026选型指南
数据库·数据仓库·sql·database·数据库架构·olap·dba
大熊猫侯佩1 小时前
WWDC26 全新 SwiftData 的 .codable 宏选项:它不是泛型专用胶水
数据库·swift·apple
童谣13 小时前
越华环保集团市级统筹申报数字化中台:政策校验与减排仿真一体化架构
数据库·架构
制造数据与AI践行者老蒋3 小时前
离谱!PromptTemplate 遇上 JSON,花括号直接引发解析战争
数据库·microsoft·json
中微极客3 小时前
用LangChain 0.3构建生产级RAG与Agent:从API集成到Streamlit部署
数据库·人工智能·langchain
吴声子夜歌3 小时前
MongoDB 4.x——并发优化
数据库·mongodb
不如语冰4 小时前
AI大模型入门-Python进阶-上下文管理与with语句
开发语言·数据结构·数据库·人工智能·pytorch·redis·python
提笔了无痕5 小时前
MySQL SQL 从 EXPLAIN 到索引优化,搞懂 SQL 为什么慢
android·sql·mysql
l1t6 小时前
DeepSeek总结的DuckLake 架构深度剖析-2
数据库·架构