为什么索引能提高查询速度?
发布日期:2021-06-30 12:41:45 浏览次数:2 分类:技术文章

本文共 905 字,大约阅读时间需要 3 分钟。

为什么能够提高查询速度?

就是通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。

一般的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。当n很大时,二者的效率相差及其悬殊。

举个例子:

表中有一百万条数据,需要在其中寻找一条特定id的数据。如果顺序查找,平均需要查找50万条数据。而用二分法,至多不超过20次就能找到。二者的效率差了2.5万倍!

在一个或者一些字段需要频繁用作查询条件,并且表数据较多的时候,创建会明显提高查询速度,因为可由全表扫描改成索引扫描。(无索引时全表扫描也就是要逐条扫描全部记录,直到找完符合条件的,索引扫描可以直接定位)

 

不管数据表有无,首先在SGA的数据缓冲区中查找所需要的数据,如果数据缓冲区中没有需要的数据时,服务器进程才去读磁盘。

1、无索引,直接去读表数据存放的磁盘块,读到数据缓冲区中再查找需要的数据。

2、有索引,先读入索引表,通过表直接找到所需数据的物理地址,并把数据读入数据缓冲区中。

索引有什么副作用吗?

1)索引是有大量数据的时候才建立的,没有大量数据反而会浪费时间,因为索引是使用二叉树建立.

2)当一个系统查询比较频繁,而新建,修改等操作比较少时,可以创建索引,这样查询的速度会比以前快很多,同时也带来弊端,就是新建或修改等操作时,比没有索引或没有建立覆盖索引时的要慢。

3)索引并不是越多越好,太多索引会占用很多的索引表空间,甚至比存储一条记录更多。

对于需要频繁新增记录的表,最好不要创建索引,没有索引的表,执行insert、append都很快,有了索引以后,会多一个维护索引的操作,一些大表可能导致insert 速度非常慢。

作者:big_foot

www.cnblogs.com/Berryxiong/p/6249427.html

END

学习资料:

最近热文:

1、

2、

3、

4、

5、

Java干货:

1、

2、

3、

4、

5、

Spring干货:

1、

2、

3、

4、

5、

本公众号干货实在太多了,没法都搬上来,扫码关注Java技术栈公众号,获取更多最主流的 Java 技术干货。

点击「阅读原文」带你飞~

转载地址:https://javastack.blog.csdn.net/article/details/104284717 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:如何提高服务器的并发处理能力?硬核!
下一篇:线程顺序执行的 8 种方法,涨姿势了!

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月21日 03时40分26秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章