当前位置: 首页 > news >正文

在MySQL中建索引时需要注意哪些事项?

在 MySQL 中建立索引是优化查询性能的重要手段,但不当的索引设计可能导致资源浪费、性能下降甚至拖慢写入速度。

所以我们我们首先要判断对于一个字段或者一些字段要不要建立索引。

适合建立索引的字段通常是:

  1. 主键字段:MySQL 会自动为主键创建索引

  2. 频繁作为查询条件的字段:WHERE(减少全表扫描的开销,从而提高查询性能)、JOIN(加快表之间的连接速度)、ORDER BY(直接利用索引的有序性进行排序,提高排序性能)、GROUP BY(帮助数据库快速将数据分组) 中频繁出现的列

  3. 选择性高的字段:对于选择性高的字段,索引可以更有效地过滤数据,减少需要扫描的记录数。

    选择性是指列中不同值的数量与总行数的比例。选择性高的字段意味着不同值的数量较多,重复值较少。

所以相对的,不适合建立索引的字段通常是:

  1. 字段的值有大量重复的,比如性别字段

  2. 长字段,为这种字段建立索引会占用大量空间,如长字符串(如 VARCHAR(255)

  3. 组成联合索引的其中一个索引不适合再创建,如已存在联合索引 (A, B),单独为 A 建索引就是冗余的。要避免冗余索引

然后,如果我们要创建索引的话,就要选择合适的索引类型

  • 主键索引(Primary Key):必须唯一且非空,InnoDB 会以主键构建聚簇索引(数据按主键顺序存储)。

  • 唯一索引(Unique Index):确保列值唯一,适用于唯一性约束(如邮箱、身份证号)。实现一人一单。

  • 普通索引(Non-unique Index):加速查询,但允许重复值。

  • 联合索引(Composite Index):多个列组合的索引,如果多个条件经常一起查询,可以考虑联合索引,减少索引数量。联合索引需注意最左前缀原则(查询条件必须包含联合索引的最左列)。

  • 全文索引(Full-text Index):适用于文本字段的模糊搜索(如 LIKE '%keyword%'),但性能有限,可以结合 Elasticsearch 等专用工具。

  • 空间索引(Spatial Index):用于地理空间数据(如 GEOMETRY 类型)。

但是,索引也有一定的代价

  • 写入性能下降:每次 INSERT/UPDATE/DELETE 需要维护索引,索引越多,写操作越慢。所以我们要控制索引的数量。虽然索引加速查询,但写操作会变慢,需要权衡读写比例。比如在写频繁的表上,索引不宜过多

  • 占用磁盘和内存:索引需要存储空间,尤其是长字段的索引。

相关文章:

  • 【Linux知识】find命令行使用详解
  • 《ATPL地面培训教材13:飞行原理》——第5章:升力
  • 生物化学笔记:神经生物学概论08 运动系统 人类逐渐建立运动技能 不同层次的运动发起
  • 【AutoDL】云服务器配置指南
  • 架构师-金丝雀与蓝绿发布
  • vue3+ts vite打包结构控制通过rollup进行配置
  • Java学习手册:Spring 生态其他组件介绍
  • PCIe | TLP 报头 / 包格式 / 地址转换 / 配置空间 / 寄存器 / 配置类型
  • 第43周:GAN总结
  • 关于项目中优化使用ConcurrentHashMap来存储锁对象
  • U3D工程师简历模板
  • “c++11“,右值,右值引用,可变参数模板...
  • Clickhouse基于breakpad生成minidump文件,方便问题定位
  • 二维码批量识别—混乱多张二维码识别-物品分拣—-未来之窗-仙盟创梦IDE
  • 强化学习中的策略评估与改进:从理论到实践(二)
  • zabbix 重置登录密码
  • Android Compose 层叠布局(ZStack、Surface)源码深度剖析(14)
  • Webug4.0靶场通关笔记11- 第15关任意文件下载与第16关MySQL配置文件下载
  • 力扣每日一题 ​838. 推多米诺​
  • VS调试技巧
  • 谢承祥已任自然资源部总工程师
  • 特朗普宣布对进口电影征收100%关税
  • 新华社:让历史照鉴未来
  • 跳水世界杯女子单人10米台决赛,陈芋汐、全红婵包揽金银牌
  • 青海大学常务副校长(正厅级)任延明已任省卫健委党组书记
  • 新加坡2025年大选开始投票