MySQL 聚集索引与非聚集索引的概念以及优缺点

概念介绍:

聚集索引(Clustered Index)

  • 定义:聚集索引是一种数据存储方式,数据表中主键记录按照索引的顺序进行物理排序。每个表只能有一个聚集索引,因为数据物理上只能排序一次。
  • 实现:在 MySQL 中,InnoDB 存储引擎默认使用主键作为聚集索引。如果没有定义主键,InnoDB 会选择一个唯一的非空索引作为聚集索引。如果没有这样的索引,InnoDB 会隐式创建一个内部的行 ID 作为聚集索引。

非聚集索引(Non-Clustered Index)

  • 定义:非聚集索引是指索引的顺序与数据表中记录的物理存储顺序无关。每一个非聚集索引都有一个指向数据记录的指针。
  • 实现:在 MySQL 中,除聚集索引外的其他索引都是非聚集索引,包括唯一索引、普通索引和全文索引等。
示例:

假设有一个名为 employees 的表,其中包含 id(主键)、namedepartment 字段。

聚集索引

  • 如果 id 是主键,则 id 字段上的索引就是聚集索引,数据表会按 id 的顺序进行物理存储。
复制代码

sql复制代码

CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50), department VARCHAR(50) );

非聚集索引

  • 如果在 name 字段上创建索引,则 name 字段上的索引就是非聚集索引。
复制代码

sql复制代码

CREATE INDEX idx_name ON employees(name);

优缺点:

聚集索引的优缺点

优点

  1. 查询速度快:当查询条件中包含聚集索引的字段时,可以快速定位到数据记录,因为数据是按照索引顺序存储的。
  2. 范围查询高效:对聚集索引列进行范围查询时,物理上相邻的数据也相邻,减少了大量的 I/O 操作。
  3. 覆盖索引:如果所需查询列包含在聚集索引中,则可以直接从索引中获取数据,而不需要回表(访问数据表)。

缺点

  1. 插入速度慢:插入新记录时,可能需要将其他记录移动以维持物理顺序,导致插入性能降低。
  2. 更新和删除速度慢:更新聚集索引列的值,或删除记录时,需要维护物理顺序,可能会导致性能下降。
  3. 二级索引较大:由于聚集索引是基于数据表的物理存储顺序,所有非聚集索引的叶子节点都包含聚集索引的键值,因此非聚集索引可能会比较大。

非聚集索引的优缺点

优点

  1. 插入速度快:插入新记录时,不需要维护物理顺序,只需更新索引树即可,插入性能较好。
  2. 更新速度快:更新非聚集索引列的值时,不需要移动数据记录,只需更新索引树。
  3. 多重索引:一个表可以有多个非聚集索引,支持多种查询需求。

缺点

  1. 查询速度慢:当查询条件中包含非聚集索引字段时,首先通过索引定位到记录的指针,然后再访问数据表获取记录,称为回表操作。
  2. 范围查询低效:对非聚集索引列进行范围查询时,需要多次回表操作,性能较差。
  3. 索引占用空间大:非聚集索引包含指向数据记录的指针,索引结构可能会比较大,占用更多存储空间。

总结:

  • 聚集索引适用于频繁进行范围查询和排序的场景,查询性能高,但插入、更新和删除操作会影响性能。必须谨慎选择聚集索引列,通常会选择唯一且不频繁更新的列,如主键。
  • 非聚集索引适用于多种查询需求,支持快速定位记录,但由于回表操作,查询性能可能较低。适合需要多个索引支持快速查询的场景。

在实际使用中,需要根据具体业务需求和数据访问模式,合理选择和优化聚集索引和非聚集索引,以提升数据库的整体性能。

相关推荐
Elastic 中国社区官方博客8 小时前
如何通过个性化、分群感知排序来提升电商搜索相关性
大数据·数据库·elasticsearch·搜索引擎·全文检索
urkay-8 小时前
Android 数据库操作线程安全吗
android·数据库·安全
ZeroNews内网穿透8 小时前
RStudio Server 结合 ZeroNews,实现远程访问管理
运维·服务器·网络·数据库·网络协议·安全·web安全
李白你好8 小时前
Redis 漏洞图形化利用工具
数据库·redis·缓存
JosieBook8 小时前
【数据库】IoTDB数据库与时序大模型深度融合,开启数据智能分析新范式
数据库·iotdb
betazhou8 小时前
docker容器单机创建3个节点的MySQLMGR集群
运维·mysql·docker·容器·集群·mgr
Logic1019 小时前
《Mysql数据库应用》 第2版 郭文明 实验4 视图和索引的构建与使用核心操作与思路解析
数据库·sql·mysql·学习笔记·计算机网络技术·形考作业·国家开放大学
码农12138号9 小时前
网络安全-SQL注入
数据库·web安全·sql注入
破刺不会编程9 小时前
ubuntu环境下mysql的安装
数据库·mysql
合方圆~小文9 小时前
变焦摄像头画面时间戳同步方案
数据结构·数据库