mysql 优化(3)聚簇索引和非聚簇索引

本文详细解析了数据库中聚簇索引与非聚簇索引的区别,特别是针对MySAM与InnoDB存储引擎的特点进行阐述。通过对比两种索引类型的数据组织方式,解释了它们的工作原理及优缺点,并提供了具体的使用场景示例。

聚簇索引和非聚簇索引  是btree 大类

按照算法 btree  

hash散列(memory引擎)在内存里


mysam  

innodb


组织数据上有区别  虽然都是btree 按照算法分


mysam    指向改行磁盘位置  索引和数据独立  非聚簇 相互独立

innodb     指向引用  本身有数据全部 聚簇 聚在这!   因为既存储主键值 又存储行数据 因此称为 聚簇索引

主索引藏着改行数据 称为聚簇索引 , 次索引指向对主键的引用 。 

没有主键会去找是不是有一个unique key ... 没有 unique key  系统会生成一个row id 
 不回行  不规则插入会造成页分裂 


innodb 

优势: 根据主键查询条目比较少时,不用回行(数据就在主键节点下)

劣势: 如果碰到不规则数据插入时,造成频繁的页分裂


分别规则插入10000条数据,不规则插入10000条数据

观察时间的差异,体会聚簇索引,页分裂的影响.  










### 索引非聚簇索引的区别及实现原理 #### 一、索引(Clustered Index) **定义**:索引是一种将数据行与索引定义的逻辑顺序保持一致的索引结构。在 MySQL 的 InnoDB 存储引擎中,表的数据存储实际上是按照主键顺序排列的,主键即为索引[^1]。如果没有显式定义主键,则 InnoDB 会选择一个唯一且非空的列作为索引;如果不存在这样的列,InnoDB 会生成一个隐藏的主键作为索引[^3]。 **实现原理**:索引的叶子节点存储的是实际的数据行,而非指向数据行的指针。这意味着当通过索引查找数据时,可以直接访问到数据本身,而无需额外的查找操作[^4]。 **优点**: - 数据访问效率高,因为数据索引是紧密关联的。 - 对于范围查询特别有效,因为数据按索引顺序物理存储。 **缺点**: - 插入或更新操作可能导致页分裂,从而影响性能。 - 如果主键不是连续递增的,可能会导致数据插入时频繁调整物理存储位置。 --- #### 二、非聚簇索引(Non-Clustered Index) **定义**:非聚簇索引是一种不改变表中数据行物理顺序的索引类型。它的叶子节点存储的是主键值(或行指针),通过这些值再去查找实际的数据行[^2]。 **实现原理**:非聚簇索引的叶子节点包含索引列的值以及指向对应数据行的引用(通常是主键值或行指针)。因此,非聚簇索引需要两次查找操作:首先通过非聚簇索引定位到主键值,然后通过主键值访问实际的数据行[^4]。 **优点**: - 可以创建多个非聚簇索引,满足不同的查询需求。 - 对于频繁更新的表,非聚簇索引的影响较小,因为它不影响数据行的物理存储顺序。 **缺点**: - 查询效率低于索引,因为需要额外的查找操作。 - 额外占用存储空间,因为需要维护索引指向数据行的引用。 --- #### 三、使用场景分析 **索引适用场景**: - 表中存在大量范围查询(如 `BETWEEN` 或 `>` 等条件)。 - 数据的插入顺序接近主键的递增顺序,减少页分裂的可能性。 - 查询经常基于主键进行,因为索引直接存储了数据行。 **非聚簇索引适用场景**: - 表中存在多个查询条件,需要为不同列创建索引。 - 数据更新频繁,但查询较少依赖于主键。 - 需要为非主键列创建索引优化查询性能。 --- ```python # 示例代码:创建索引非聚簇索引 CREATE TABLE employees ( id INT PRIMARY KEY AUTO_INCREMENT, # 主键自动成为索引 name VARCHAR(50), department_id INT, INDEX (department_id) # 非聚簇索引 ); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

银色种子

打赏 >100 请留言,并私信

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值