最近学习Mysql索引,有一些理解。
1、索引是什么
索引(Index)是帮助MySQL高效获取数据的数据结构。可以得到索引的本质:索引是数据结构。
可以理解为“排好序的快速查找数据结构”
在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,
这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
2.、Mysql索引为什么要用B+树,而不用Hash, 二叉树和红黑树?
Hash 不能查询一个范围值 ,比如: select * from table where id > 1
二叉数、红黑树,数高无法控制
B+:
1.文件很大,不可能全部存储在内存中,故要存储到磁盘上
2.索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/+Tree,还跟磁盘存取原理有关。)
3.局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数,(在许多操作系统中,页得大小通常为4k)
4.数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,(由于节点中有两个数组,所以地址连续)。而红黑树这种结构,h明显要深的多。由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性
B+树数据机构模型网站:
http://www.cs.usfca.edu/~galles/visualization/BPlusTree.html
3、 Mysql存储引擎中的MyISAM和InnoDB区别
可参考这篇博文: https://www.cnblogs.com/xyxxs/p/4440187.html