MySql教程

各种索引的比较和MySQL数据库索引的选择

本文主要是介绍各种索引的比较和MySQL数据库索引的选择,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

哈希索引
通过一个哈希函数,把值映射到某个区间的某个位置,读取的时候,也是通过找到映射位置并进行读取,平均的查找复杂度为O(1)。即对索引的key进行一次hash计算就可以定位出数据存储的位置。
典型的应用就是HashMap的底层实现,就是把key通过做一个哈希操作得到一个哈希值,然后再用这个哈希值对HashMap底层的数组长度取余,余数便是数组下标,数组所存的元素一般是一个链表,链表存储着哈希到这个位置的元素。如下图

哈希索引的优点:做等值查询(=,in)的时候很快,添加或者删除单个确定的元素很快;缺点在于哈希表中的元素不一定按顺序排列,无法做区间查询,哈希索引这种结构其实只适合等值查询的场景。

有序数组索引
如下图,相当于数组元素按照身份证号有序排列,要查询数据可以用二分查找,时间复杂度也是O(logN),区间查询的速度也非常快。

缺点:由于有序数组对查询友好,对插入删除操作不友好,如果插入删除数据的话,很可能要移动大量数据,开销非常大,所以其实有序数组索引只适合存储静态数据,就是存不怎么变的数据。

搜索树索引
树形的索引,比如二叉搜索树,多路平衡树等。优点是可以支持快速查找,也支持节点的插入和删除操作。然后如果是B+树的话,底层叶子节点之间有指针连接,这样的数据结构便于我们实现一个区间查找的功能,只要找到区间的两个端点在叶子节点中的位置,然后遍历两个端点之间的数据,就能实现区间查询。

这篇关于各种索引的比较和MySQL数据库索引的选择的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!