MySQL学习之路(三):MySQL的索引机制
来源:互联网 发布:淘宝平面模特怎么入行 编辑:程序博客网 时间:2024/05/17 04:29
首先,我们要先了解索引的基本原理,具体参考 :http://blog.csdn.net/lengyuhong/archive/2010/09/02/5859591.aspx
简朝阳的《mysql性能调优与架构设计》一书中,索引的优化主要参见 “8.4 合理设计并利用索引”一节,看好之后,受益匪浅的。
在此基础上,我还从简朝阳的博客上载录了几篇介绍mysql中不同存储引擎不同的索引结构:
1.Innodb
Innodb 作为 MySQL 中使用最为广泛的 事务型存储引擎,不仅在事务实现数据版本控制方面和其他存储引擎有一定的区别,其数据结构也是以非常有特点的方式存储的。
每个Innodb表的数据其实可以说就是以一个树型(B-Tree)结构存储的,表的数据和主键(Primary Key)共同组成了一个索引结构,也就是我们常说的Innodb的Clustered Primary Key。在这个Clustered Primary Key中,Leaf Nodes其实就是实际的表记录,我们常规理解上的索引信息全部在Branch Nodes上面。
除了Clustered Primary Key之外的其他所有索引在Innodb中被称为Secondary Index。Secondary Index就和普通的B-Tree索引差不多了,只不过在Secondary Index的所有Leaf Nodes上面同时包含了所指向数据记录的主键信息,而不是直接指向数据记录的位置信息。
所以,在 Innodb 中,如果主键值占用存储空间较大的话,会直接影响整个存储 Innodb 表所需要的物理空间,同时也会直接影响到 Innodb 的查询性能。
下面是画的一张 Innodb 索引基本结构图,包括 Primary Key 和 Secondary Index 两种索引的比较。
2. MyISAM存储引擎
在此之前曾经写过一篇介绍 “Innodb 索引结构了解 – Innodb Index Structure” 的文章,这次再接着分析一下 MyISAM 存储引擎索引的 基本存储结构。
从索引基本的存放数据结构来说,MyISAM 的索引不论是 Primary Key 还是普通 Index,存储结构都基本一样,基本结构都是 Balance Tree (简称为 B-Tree),所有的键值详细信息和行“指针”信息都存放于 B-Tree 的 Leaf Nodes 上面。这个基本的数据结构和 MySQL 的其他存储引擎如 Innodb 也基本相同。但是,MyISAM 的索引并不像 Innodb 存储引擎那样 Primary Key 和 Secondary Index 中存放的数据存在较大区别。在 MyISAM 存储引擎中,Primary Key 和其他的普通 Index 的主要区别仅仅在于 Primary Key 的索引键需要满足是非空的唯一值而已,另外一个区别其实也是每一个普通索引之间都存在的区别,就是整个索引树的键值排列顺序不太一样。
由于 MyISAM 存储引擎中数据行的存储分为固定长度和动态长度两种,所以在 MyISAM 存储引擎的数据文件中定位一行数据所需要信息也存在两种方式。一种是直接通过行号(row number)来定位固定长度表数据的行,另外一种是通过其他一些相对的文件位置标识信息来定位动态长度表数据的行,这里我们姑且将两种方式统称为RID(Row ID)吧。
下面这张图片展示了 MyISAM 索引的基本存储方式:
另一篇介绍mysql索引不错的文章:http://blog.csdn.net/lengyuhong/archive/2010/10/26/5967229.aspx
- MySQL学习之路(三):MySQL的索引机制
- mysql学习笔记之三(索引)
- 学习笔记--mysql索引(三) 独立的列,前缀索引和索引的选择性
- MySQL学习之索引
- mysql索引(三)
- MySQL的索引机制介绍
- mysql学习之路三(转)
- MySQL实战(三)索引的注意事项
- 我的Linux学习之路(三、安装mysql)
- MySql索引的学习
- mysql学习日记之索引
- mysql学习之索引原理
- MySQL之索引学习笔记
- MySql 学习之索引详解
- MySql学习之索引优化
- MySQL性能优化三之索引的优化
- MySQL 数据库性能优化之(三)索引优化
- 【Day61】MySQL数据库性能优化之三(索引优化)
- Spring v3.0.2 Learning Note 9 - Classpath Scanning
- CTreeCtrl和CListCtrl复杂控件的综合使用
- 在使用Mvc ”FormCollection “ +“ValidationSummary”和“ValidationMessage” 验证数据时的小问题
- 详解Spring事务属性
- NOKIA最全常识+技术+经验
- MySQL学习之路(三):MySQL的索引机制
- 解决 CodeSign error: Code Signing Identity ‘iPhone Developer’ does not match any code-signing certificate in your keychain.问题
- 展望2020年的设计
- 解惑 spring 嵌套事务
- access数据库密码的mdb的访问报错的问题解决
- spring中配置c3p0连接池
- Spring v3.0.2 Learning Note 10 - Annotation-based Transaction Management
- Spring v3.0.2 Learning Note 11 - XML-based Transaction Management
- 关于viewstate保护问题