底层数据是什么意思
底层数据,就是这行业里面最底层的基础数据内容。这个,我们叫底层数据。底层数据一般是格式化的数据。索引是帮助MySQL高效获取数据的排好序的数据结构,该数据结构是存储在文件中的。
一、底层数据结构总结
1.List
– ArrayList:Object数组
– Vector:Object数组
– LinkedList:双向链表
2.Set
– HashSet(无序,少数):基于HashMap实现,底层采用HashMap来保存元素
– LinkedHashSet:LinkedHashSet继承于HashSet,内部通过LinkedHashMap来实现
– TreeSet(有序,少数):红黑树(自平衡的排序二叉树)
3.Map
– HashMap:JDK1.8之前由数组+链表组成的,数组是HashMap的主体,链表是为了解决哈希冲突而存在的。JDK1.8之后,当链表大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间
– LinkedHashMap:LinkedHashMap继承自HashMap,在原有结构上增加了一条双向链表,使得上面结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑
– TreeMap:红黑树
二、二叉树数据结构
二叉树的数据结构其实是不适合作索引的,虽然有一定程度的减少了查询的次数。但是效率并不是很高。
二叉树的查找数据的时间复杂度是O(log2N),查找时间适合深度有关系的,深度越高查找时间越长。但是二叉树如果要是已主键为索引,然后主键是自增的话,那么就会发生链表的情况,这样是没有减少查询次数,如果数据量大的,查询时间会很长,和没有使用索引几乎无差别的。
三、红黑树数据结构
红黑树它平衡了二叉树,它具有一个自动平衡的功能,使得自增id不会成为链表状态。这样可以使查询时间减少。完美的避开了二叉树的致命缺陷。下面我们看一下红黑树的数据结构。
它不像二叉树那样,呈现链表状态,他能一定程度的减少查询次数,缩短查询时间。这个数据结构如果是内存中的话,那么运行效率是非常高,但是这个数据结构中在索引中,却不是很适合做索引的数据结构,这是为什么呢?
因为索引是存储在文件中的。刻在磁盘上面,数据量增加后,文件大小就会增加。如果是千万级的数据量那么文件会很大。而数据是没有办法一次性加载到内存中的。所以加载到内存中需要多次加载数据,每一次都不能确保数据在相同的磁道上,所以在存储数据的时候,需要尽量存在相同的磁道上面。磁盘读取数据时,是顺序读取的,这样是不会产生寻道时间,只有磁盘旋转。而红黑树没有顺序分布在磁盘中,所以查询的时候回出现不断地寻道。如果数据量大的情况下,会产生更多的寻道。这样在数据库查询中,会大大降低查询速度。
最后,推荐我们的管理工具给大家。