[MySQL] 索引与性能(2)- 聚簇索引
来源:互联网 发布:免费下载安装淘宝网 编辑:程序博客网 时间:2024/06/15 23:59
聚簇索引是一种数据存储方式,它实际上是在同一个结构中保存了B+树索引和数据行,InnoDB表是按照聚簇索引组织的(类似于Oracle的索引组织表)。
InnoDB通过主键聚簇数据,如果没有定义主键,会选择一个唯一的非空索引代替,如果没有这样的索引,会隐式定义个主键作为聚簇索引。
下图形象说明了聚簇索引表(InnoDB)和普通的堆组织表(MyISAM)的区别:
对于普通的堆组织表来说(右图),表数据和索引是分成存储的,主键索引和二级索引存储上没有任何区别。
而对于聚簇索引表来说(左图),表数据是和主键一起存储的,主键索引的叶结点存储行数据,二级索引的叶结点存储行的主键值。
聚簇索引表最大限度地提高了I/O密集型应用的性能,但它也有以下几个限制:
1)插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键。
2)更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。
3)二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。
二级索引的叶节点存储的是主键值,而不是行指针,这是为了减少当出现行移动或数据页分裂时二级索引的维护工作,但会让二级索引占用更多的空间。
- [MySQL] 索引与性能(2)- 聚簇索引
- mysql聚簇索引与非聚簇索引
- [MySQL] 索引与性能(1)- 索引类型
- [MySQL] 索引与性能(3)- 覆盖索引
- [MySQL] 索引与性能(3)- 覆盖索引
- [MySQL] 索引与性能(4)- 排序
- MySQL索引:聚簇索引与非聚簇索引的区别
- MySQL索引:聚簇索引与非聚簇索引的区别
- 高性能的MySQL(5)索引策略-覆盖索引与索引排序
- 高性能MySQL之--聚簇索引
- mysql中的索引(聚簇索引和非聚簇索引)
- MySQL (8) 聚集索引 非聚集索引 聚簇索引 稀疏索引 稠密索引
- MySql优化2——索引与性能分析
- MySQL索引与高性能SQL介绍
- MySQL 基础与高性能索引策略
- MySQL性能优化---索引
- Mysql 高性能索引
- mysql 性能索引篇
- 论Java的ArrayList.add(e)和C++的vector.push_back(e)的区别
- 11G RAC 裸设备表空间迁移到ASM
- 领域模型驱动设计(Domain Driven Design)入门概述
- Dissecting the Windows Kernel - 关于ObReferenceObjectByHandle中对句柄的处理
- 使用命令行对APK签名(已有签名文件)
- [MySQL] 索引与性能(2)- 聚簇索引
- java反射中getMethod getDeclaredMethod .
- UIAlertView用法
- Piotr Dollar(皮洽-多拉)同学的论文Peestrain Detection:An Evaluation of the State of the Art读后记录
- Block语法的使用
- 程序员练级攻略
- PHP执行系统命令 exec,system,passthru,popen
- [好用的小控件] 自带清除的EditText
- 韩顺平网页设计第三十一三十二讲