B+Tree的数据结构
在算法搜索的时候会非常的高效, 这种数据结构特别合适现在的硬盘这个存储的介质
扩展:
操作系统上的文件系统也是使用B+Tree的数据结构, 这个不区分操作系统
特点:
1.单节点可以存储更多的元素,使得查询磁盘IO次数更少。
2.所有查询都要查找到叶子节点,查询性能稳定。
3.所有叶子节点形成有序链表,便于范围查询。
总结
B+树还有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持range-query非常方便,而B树不支持。这是数据库选用B+树的最主要原因。
非聚(集)簇结构(MyISAM的索引结构)
主索引
主索引是不能有重复的, 我们的索引下面的数据区保存的是innode(硬盘数据区的编号). 找到索引对应的编号, 通过这个编号区数据区找到这个数据, 就把需要的数据返回给客户端
普通索引
普通索引的值是可以重复的, 其他和主索引是一样的
聚簇(集)结构(innodb)的索引结构
主索引
innodb索引的数据在一起的, 所以我们在创建innodb的与myisam是不一样的, innodb必需创建主键ID, 必需实现auto_increment
保存索引的ID是有序增长的, 如果不是有序增加的, 当你插入一条ID小于已经存在的ID的时候, 这个时候ID就会去排序, 后面的值都会在数据区移动, 这个移动过程就会消耗IO, 后面移动的数据越大, 这个消耗就越大, 这是非常非常不好的行为
如果你不创建主键, 它是会自动去找一个可以作为主键的值, 如果没有, 他就会隐藏的创建一个作为主键的值
既然它一定要有主键, 所以我们一定要给它创建
普通索引
普通索引下面的数据区保存的是主键的ID, 这些ID会在进行普通索引搜索的时候, 返回, 在返回之后, 再到主键索引取进行索引
这就说明, 如果Innodb你不使用主键索引进行查询, 就会出现我们的二次遍历, 第一次遍历普通索引, 第二次遍历主键索引
总结:
MyISAM的索引的索引结构都是一样的, 主索引比其他索引就是多一个不重复的功能, 所以你在使用MySIAM的时候, 创建索引, 可以任意, 但是以数字ID进行自增长的索引,占用的长度与空间更少更小
还是建议使用auto_increment
Innodb的主键索引与普通索引, 完全不一样, 主索引只要一次遍历就可以了, 普通索引必须进行二次遍历才能得到结果
终:
以后我们的创建表, 一定要创建主键, 必需是auto_increment