聚簇索引和非聚簇索引
来源:互联网 发布:c语言阶乘函数 编辑:程序博客网 时间:2024/05/21 06:49
聚簇索引是一种数据存储方式,它实际上是在同一个结构中保存了B+树索引和数据行,InnoDB表是按照聚簇索引组织的(类似于Oracle的索引组织表)。
InnoDB通过主键聚簇数据,如果没有定义主键,会选择一个唯一的非空索引代替,如果没有这样的索引,会隐式定义个主键作为聚簇索引。
对于非聚簇索引表来说,表数据和索引是分成存储的,主键索引和二级索引存储上没有任何区别。
而对于聚簇索引表来说,表数据是和主键一起存储的,主键索引的叶结点存储行数据,二级索引的叶结点存储行的主键值。
聚簇索引表最大限度地提高了I/O密集型应用的性能,但它也有以下几个限制:
1)插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键。
2)更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。
3)二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。
二级索引的叶节点存储的是主键值,而不是行指针(非聚簇索引存储的是指针或者说是地址),这是为了减少当出现行移动或数据页分裂时二级索引的维护工作,但会让二级索引占用更多的空间。
聚簇索引的叶节点就是数据节点,而非聚簇索引的页节点仍然是索引检点,并保留一个链接指向对应数据块。
聚簇索引主键的插入速度要比非聚簇索引主键的插入速度慢很多。
相比之下,聚簇索引适合排序,非聚簇索引不适合用在排序的场合。因为聚簇索引本身已经是按照物理顺序放置的,排序很快。非聚簇索引则没有按序存放,需要额外消耗资源来排序。
当你需要取出一定范围内的数据时,用聚簇索引也比用非聚簇索引好。
0 0
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引介绍
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引介绍
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引
- 【数据库】聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引探讨
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引
- 聚簇索引和非聚簇索引
- MySQL 聚簇索引 和 非聚簇索引
- 聊天界面的制作(一)——基本布局的实现
- cat proc/version在内核中是如何实现的?
- java实现给一个文件重命名
- [盈利]移动APP盈利模式简述
- centos7 设置字体大小
- 聚簇索引和非聚簇索引
- LEETCODE-Ugly Number
- Oracle数据库修改字段长度
- 第十三章 时间序列分析和预测
- 求递归算法时间复杂度:递归树【待研究】
- 《IOS_C语言》函数指针、函数回调、动态排序、函数返回值是函数指针
- 整数的个数
- 面试题26:复杂链表复制
- OSSchedLock()函数透析 转自:跳跳盆盆——博客园http://www.cnblogs.com/pengwangguoyh/p/4446024.html