mysql索引总结(1)-mysql 索引类型以及建立html
mysql索引总结(2)-MySQL聚簇索引和非聚簇索引mysql
mysql索引总结(3)-MySQL聚簇索引和非聚簇索引算法
mysql索引总结(4)-MySQL索引失效的几种状况
sql
聚簇索引就是对磁盘上的实际数据从新组织以按照特定的一个或者多个列的值排序的算法数据结构
特色是存储数据的顺序和索引顺序一致 通常状况下主键会默认生成聚簇索引 且一张表有且只有一个聚簇索引post
聚簇索引和非聚簇索引的区别是:mysql索引
聚簇索引(innobe)的叶子节点就是数据节点 而非聚簇索引(myisam)的叶子节点仍然是索引文件 只是这个索引文件中包含指向对应数据块的指针url
MySQL中不一样的数据存储引擎对聚簇索引有不一样的支持spa
MyISAM使用的是非聚簇索引指针
原始数据
存储方式
按照列值和行号来组织索引的 叶子节点中保存的其实是指向存放数据块的指针
从物理文件中也能够看出 MyISAM的索引文件.MYI和数据文件.MYD是分开存储的 是相对独立的
对于InnoDB引擎来讲,是按照聚簇索引的形式存储数据
它的每一个聚簇索引的叶子节点都包含主键值、事务ID、回滚指针(用于事务和MVCC)以及余下的列。
从物理文件也能够看出 InnoDB的数据文件只有数据结构文件.frm和数据文件.idb 其中.idb中存放的是数据和索引信息 是存放在一块儿的
InnoDB的二级索引和主键索引也有很大的不一样 二级索引存放的是主键值而不是行指针 减小了移动数据或者分裂时维护二级索引的开销,由于不须要更新索引的行指针
MyISAM和InnoDB的二级索引的对比
从图中能够看出 InnoDB二级索引的叶子节点存放的是KEY字段+主键值,所以首先经过二级索引查找到的是主键值,再根据主键值在朱建索引中查找到相应的数据文件。
而MyISAM的二级索引存放的仍是列值和行号的组合 叶子节点中保存的是指向物理数据的指针,所以它的主建索引和二级索引的结构并无任何区别,只是说主键索引的索引值是惟一且非空的,而MyISAM引擎能够不设置主键。
InnoDB引擎是必须设置主键的,须要依赖主键生成聚簇索引,所以当没有指定主键的时候,InnoDB引擎会默认寻找一个能够惟一标识每行数据的列做为主键,当这种列不存在的时候,会默认生成一个6字节整型的隐藏列做为主键