这个问题和线性查询、二分查询是有很大关系的 。索引后的数据可以使用二分法查询,未索引的数据查询需要线性查询 。下面详细说一下这两者之间的性能区别 。
文章插图
1、两者的查询原理①、线性查询
线性查询又称顺序查询,它的查询原理就是从第一条记录开始,逐个比较要查找的字段,直到字段内容和查找值相等,则查找成功,返回结果 。若比较结果与字段所有记录都不等,则查找失败 。下面举例说明:
需要在某个记录数为N的数组a[]中查找元素k,那么,线性查询就是从a[1]开始和k进行对比,对比相等则返回a[i],如果,不相等则继续下一个查询, i=i+1 。直到 i=N为止 。那线性查询的性能就一目了然:
- 最好的情况就是对比1次就找到结果 。
- 最差的情况就是需要对比N次才能找到结果 。
- 平均计算,就是N/2次能找到结果 。
文章插图
②、二分查询
二分法查询也可以说是分段查询 。主要原理就是对已经排序的一组数据进行中间分段,中间分界点和查询值对比 。如果数值小于分界点,则要查找的数落在前半段;如果数字大于分界点,则要查找的数落在前半段;如果等于分界点,则要查找数就已经找到 。下面同样举例说明:
需要在某个记录数为N且已经排好序的数组a[]中查找元素K,那么,二分查询首先是确定数组的中点a[x],其实也就是a[N/2]这个值(N/2采用进一法取整) 。然后对比a[x]和K值,按照前面的方法循环缩小对比的区间,最终找到想要的值 。二分查询的性能如下:
- 二分法查询N条记录需要log2(N)次对比就能找到结果 。
- 前提是:数组必须要排好序
文章插图
推荐阅读
- 简单易用的数据库哪个比较好?
- MySQL是如何利用索引的?
- mongodb,redis,hbase,三者都是nosql数据库,他们的最大区别和不同定位是什么?
- 西蒙海耶被谁打中的 西蒙海耶的狙击枪
- 《三国演义》中卧龙凤雏分别是谁-?三国演义中的卧龙指的是谁当时与他齐名的凤雏指的是谁
- SpringBoot中的定时任务的同步与异步你确定真的知道?
- 使用Apache Calcite解析数据库查询
- Redis、传统数据库、HBase以及Hive的区别
- MySQL详解:索引的介绍和原理分析
- 中国联通|日赚3.87亿!三大运营商财报中的小秘密