mysql 的数据、索引、DDL 等数据,都是以文件形式存储的,
所以导致每次查询都是一次I/O操作,当I/O操作过大时,会严重影响效率
MYSQL索引结构:
mysql使用的是B+树来存储索引的,为什么不用其他的呢?
二叉树 -> 根据二叉树的概念,当数据是递增的时候,它的节点会一直增大下去
红黑树 -> 平衡二叉树 -> 每个节点存一个值,同样会导致节点过多
B 树 -> 每个节点可存多个值(解决红黑树太深的问题) ->但是涉及到范围查询的时候,也会慢
B+树 -> 变种B树 -> 叶子节点 有指针相连 (方便范围查询)
MYSQL引擎存储结构:
myIsam 引擎 : 存储数据单独一个文件 .MYD 存储索引单独一个文件 .MYI
innerdb引擎 : 一个文件 同时存 索引+数据 .idb (聚集索引) 寻址快,
又为什么所有的data都存在叶子结点上?
mysql 默认每个节点存16K数据,如果每个节点都存 key+value 会导致每个节点的key变少,从而导致节点增多 ,导致树H变高。
分享一个不错的数据结构学习网站:
https://www.cs.usfca.edu/~galles/visualization/Algorithms.html