mysql优化一般优化都会先加索引,那么索引到底是什么?
索引是帮助MySql高效获取数据的排好序
的数据结构
;
数据结构分为:
二叉树
红黑树
Hash表
B-Tree
- 二叉树
- 二叉树的数据结构为:
左边为数据存放的磁盘文件位置,右侧为二叉树的数据结构;二叉树的结构都是分叉时候左边下于当前数,右边大于当前数;
这时候按照二叉树结构我们只需要查找三次就能找到数据存放磁盘的地方但是当我们建立一个二叉树的数据数为:
这样递增的时候,查询一条数据:
select * form where Col1=6
这时候二叉树需要从上往下查找到6次,明显这时候建立了索引和没有索引是一样的;所以二叉树在递增下变成了链条模式将无用了;
- 红黑树
红黑树又名:平衡二叉树;所谓平衡二叉树就是如图所示他的数据结构会平衡,不会产生单链条模式;
当使用红黑树我们建立数据为:
select * form where Col1=6
这时候只需要3次就能查到位置;
红黑树明显二叉树查找要快,但是当数据量达到百万千万级别红黑树就很高,所以早期的数据库使用的红黑树结构现在都不是使用红黑树;
- B-Tree
- mysql使用的是这种数据结构:
每层索引都有关联关系,那么这种的存储好处是横向存储的数据越多,存储的树结构越小;
新版的数据结构为 B+Tree
B+Tree实际就是B-Tree的一种优化变种;B+Tree的区别为:1,他的所有存储都把索引放到了叶子的节点;2:把所有的数据结构都摞移到叶子结点,这样让跟结点只存放大的节点,让存储根茎部分存储量更小,可以存放更多的索引;3,叶子结点的索引左右都有联动性,提高区间访问的性能;
- Hash表
- 也称为散列表 由直接寻址表改进而来.先看直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术,直接寻址存在一个很明显的问题。如果域U很大,在一台典型计算机的可用容量的限制下,要在机器中存储大小为U的一张表T就有点不太实际,甚至不太可能。如果实际要存储的关键字集合K相对U来说很小,那么分配给T的大部分空间都要浪费掉
以上测试数据结构都可以去国外一所大学网站上自己测试:
www.cs.usfca.edu/~galles/visualiza...
本次先介绍这么多,本来准备下篇讲解mysql军规但是 @guoke0826 这位大佬讲了,可以去看看:分享:MySQL 规约(转自阿里巴巴 Java 开发手册)