赞
踩
我们知道索引是帮助MySql高效获取数据的数据结构。但是为什么使用索引后查询效率会有如何大的提升?这就要索引的数据结构有关了,我们来了解一下索引的数据结构
在没有索引的情况下我们执行一条sql语句,那么是MySql进行全表遍历,磁盘寻址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)
为了加快的查找效率,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找快速获取到相应数据。
每个节点下,只能有两个子节点,并且左边子节点比父节点小,右边子节点比父节点大
平衡二叉树是针对二叉树做了增强:会通过左旋、右旋达到一个自平衡,而不会形成链表。
B+Tree是对B-Tree的改进版,每个非叶子节点上只保存索引值和指针,只有叶子节点才保存数据。
MySql每个索引节点大小默认是16KB。索引值大小8B、指针值大小6B,那么一个节点可以存储1170个元素;存储1KW数据,只需要3层就可以了。
查看每个节点大小:show global status like 'innodb_page_size';
MySql为了提高性能,会预选把根节点的数据加载到内存中。那么如果是3层的树,只要2次IO就可以找到指定的数据了
所有叶子节点,使用链表串起来,大大提升了范围查询的速度
redis:性能强,查询速度极快,用来作为缓存,而不是持久化存储的数据库
存取数据的时候,需要先对数据进行哈希运算,得出一个值,此值就是对应的hash桶。hash桶中的数据结构为链表或者红黑树。
jdk8中hashmap桶中的数据结构
- 当桶中的数据超过8的时候就由链表–>红黑树;
- 当数据小于6的时候就会由红黑树–>链表
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。