课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在前几期的文章中曾经给大家简单介绍了MySQL数据库应用等技术知识点,而本文我们就通过案例分析再来学习一下,MySQL数据库索引模型类型都有哪些。
1、哈希表
哈希表是一种以键-值(key-value)存储数据的结构,我们只要输入待查找的值即key,就可以找到其对应的值即value。哈希的思路很简单,把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置。
多个key值经过哈希函数的换算,会出现同一个值的情况。处理这种情况的一种方法是,拉出一个链表。有没有发现,其实HashMap就是这样的数据结构。
这里要提一下这个点,user_idn的值并不是递增的,这样有个好处,新增用户的时候会很快,只需要往后追加;但也有缺点,因为不是有序的,所以哈希索引做区间查询的速度是很慢的。
所以,哈希表这种结构适用于只有等值查询的场景,比如Memcached及其他一些NoSQL引擎。
2、有序数组
上面的哈希表不适合范围查询,而有序数组在等值查询和范围查询场景中的性能就都非常优秀。
我们来分别看看有序数组针对等值查询与范围查询的时间复杂度,等值查询比如你要查user_id2对应的名字,用二分法就可以快速得到,这个时间复杂度是O(log(N))。范围查询比如你要查询[user_id2,user_id5]之间的用户,同样利用二分查找先找到user_id2(如果不存在user_id2,就找到大于user_id2的一个用户),然后向右遍历,直到查到一个大于user_id5,退出循环。
查询场景确实很优秀,但有序数组也有缺点,更新数据的时候那就有点麻烦了,比如你往中间插入一条用户,该用户后面所有的记录都要往后移动,成本太高了。
所以,有序数组索引只适用于静态存储引擎,比如你要保存的是历史某一年某个城市的所有人口信息,这类不会再修改的历史数据。
3、二叉树
二叉树是一棵树,其中每个节点都不能有多余两个的儿子。二叉树也是的树结构,下面讲的各种树都是基于二叉树改进而来的。
我们先来看下二叉树的特点:
二叉树的平均时间复杂度为O(log(N))
每个节点多只能有两个子节点
一般二叉树:
坏情形的二叉树,出现链化的情况:
实现:
因为一个二叉树节点多有两个子节点,所以我们可以保存直接链接到它们的链。树节点的声明在结构上类似于双链表的声明,在声明中,节点就是由element(元素)的信息加上两个到其它节点的引用(left和right)组成的结构。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。