查看原文
其他

为什么索引能提高查询速度?

Java技术栈 2020-10-16


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

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

一般的顺序查找,复杂度为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


学习资料:

分享一份最新 Java 架构师学习资料
100 本 Java 架构师重磅电子书!

最近热文:

1、过年回家,反借钱攻略!
2、20200202,千年难遇啊!
3、YYYY-MM-DD 的黑锅,我们不背!
4、京东把 Elasticsearch 用的真牛逼!
5、IDEA 公司推出新字体,极度舒适~
Java干货:
1、2020 最新 Java 面试题整理,建议收藏!
2、Oracle JDK 和 OpenJDK 有什么区别?
3、Java 14 令人期待的 5 大新特性!
4、Java中的对象都是在堆上分配的吗?
5、图文并茂,傻瓜都能看懂的JVM内存布局

Spring干货:

1、Spring 事务失效的 8 大原因,吊打面试官!
2、Spring 面试 7 大问题,你顶得住不?
3、Spring Boot 之配置导入,强大到不行!
4、Spring Cloud Greenwich最后计划版本发布!
5、Spring Cloud 升级最新 Greenwich 版本
本公众号干货实在太多了,没法都搬上来,扫码关注Java技术栈公众号,获取更多最主流的 Java 技术干货

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

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存