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

MySQL聚簇索引和非聚簇索引 通俗易懂

聚集索引

(Clustered Index)是指数据表的记录按照索引的顺序进行物理存储。也就是说,表中的数据行和索引行一起存储,并且数据行的顺序与索引的顺序相同。聚集索引的特点是索引的叶节点包含了实际的数据行。
在 MySQL 中,InnoDB 存储引擎默认使用聚集索引。InnoDB 表必须有一个聚集索引,如果没有显式定义主键,InnoDB 会选择一个唯一的非空索引作为聚集索引。如果没有这样的索引,InnoDB 会自动生成一个隐藏的聚集索引。

特点

  1. 物理顺序存储:数据行按照索引键的顺序存储在数据页中。
  2. 叶节点包含数据:聚集索引的叶节点包含了实际的数据行。
  3. 只能有一个:每个数据表只能有一个聚集索引,因为数据行只能按一种顺序存储。

优点

  1. 查询效率高:对于基于聚集索引的范围查询和排序操作,效率较高,因为数据行是按索引顺序存储的。
  2. 覆盖索引:在某些查询中,聚集索引可以充当覆盖索引,从而减少读取数据的次数。

缺点

  1. 插入速度较慢:在插入新记录时,可能需要移动大量数据行以保持索引顺序。
  2. 更新代价高:更新聚集索引键值时,可能导致数据行的重新排序。
  3. 占用更多存储空间:由于数据行和索引一起存储,可能占用更多的存储空间。

示例

假设有一个表employees,包含以下列:

CREATETABLE employees (
    emp_id INTPRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    hire_date DATE
) ENGINE=InnoDB;

在这个表中,emp_id是主键,并且默认情况下,InnoDB 会将emp_id列作为聚集索引。数据行将按照emp_id的顺序存储。

使用注意

  • 选择合适的列:选择频繁用于查询、排序和范围查询的列作为聚集索引的键。
  • 避免频繁更新的列:避免选择那些频繁更新的列作为聚集索引键,以减少维护成本。

非聚集索引

**(Non-Clustered Index),也称为辅助索引或二级索引,是指索引的叶节点不包含实际的数据行,而是包含指向数据行的指针(通常是聚集索引键)。非聚集索引的主要作用是加速特定列上的查询操作,而不改变数据行的物理存储顺序。记录的物理顺序与逻辑顺序没有必然的联系。

特点

  1. 独立于数据存储顺序:非聚集索引不会改变数据行的物理存储顺序,数据行的顺序由聚集索引决定。
  2. 叶节点包含指针:非聚集索引的叶节点存储的是指向实际数据行的指针(如聚集索引键),而不是数据行本身。
  3. 可以有多个:一个表可以有多个非聚集索引,每个非聚集索引加速不同列上的查询操作。

优点

  1. 加速查询:非聚集索引可以显著加速特定列上的查询操作,特别是那些经常出现在 WHERE 子句中的列。
  2. 多样性:可以在多个列上创建非聚集索引,以满足不同查询需求。

缺点

  1. 占用空间:非聚集索引需要额外的存储空间来维护索引结构。
  2. 维护成本:在插入、更新和删除操作时,需要维护非聚集索引,可能会增加开销。

示例

假设有一个表employees,包含以下列:

CREATETABLE employees (
    emp_id INTPRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    hire_date DATE
) ENGINE=InnoDB;

在这个表中,emp_id是聚集索引。如果我们在last_name列上创建一个非聚集索引:

CREATE INDEX idx_last_name ON employees(last_name);

查询示例

假设我们执行以下查询:

SELECT*FROM employees WHERE last_name ='Smith';

MySQL 会使用idx_last_name非聚集索引来查找last_name为 ‘Smith’ 的记录。非聚集索引的叶节点包含指向实际数据行的指针(即emp_id),MySQL 会根据这些指针访问实际的数据行。

相关文章:

  • 【C++游戏引擎开发】第1周《线性代数》(1):环境配置与基础矩阵类设计
  • pyqt 信号与槽
  • 生物中心论
  • mysqlworkbench导入.sql文件
  • Linux应用:线程基础
  • MATLAB中iscell函数用法
  • 内嵌式触摸显示器在工业视觉设备中的应用
  • python策略模式
  • OpenBMC:BmcWeb 生效路由2 Trie字典树
  • 《Tr0ll2 靶机渗透实战:弱口令+SUID+两种缓冲区溢出+ 提权完整+fcrackzip暴力破解+shellshock漏洞+脏牛三种root提权复盘》
  • 企业级大模型微调
  • SAP-ABAP:SAP IDoc技术详解:架构、配置与实战
  • 若依专题——基础应用篇
  • 如何实现多维度风险排查与合规管理?
  • 如何防御TCP洪泛攻击
  • 考研408-数据结构完整代码 线性表的链式存储结构 - 单链表
  • 多网络选择路由(windows环境)
  • 分布式共识算法解密:从Paxos到Raft的演进之路
  • 容器C++
  • CI/CD(八) gitlab搭配Jenkins的ci/cd配置
  • 做影视网站用的封面/seo优化快速排名
  • 怎么做app网站/个人网站推广
  • 广西建网站/抖音搜索排名
  • wordpress jquery版本/优化大师破解版app
  • 宝安高端网站建设/seo站长工具 论坛
  • 网站开发后台数据库怎么搞/长春网站公司哪家好