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

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

索引就是通过事先排好序,从而在查找时可以应用二分查找等高效率的算法。
一般的顺序查找,复杂度为O(n),而二分查找复杂度为O(log2n)。当n很大时,二者的效率相差及其悬殊。

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

在一个或者一些字段需要频繁用作查询条件,并且表数据较多的时候,创建索引会明显提高查询速度,因为可由全表扫描改成索引扫描。

(无索引时全表扫描也就是要逐条扫描全部记录,直到找完符合条件的,索引扫描可以直接定位)

不管数据表有无索引,首先在SGA的数据缓冲区中查找所需要的数据,如果数据缓冲区中没有需要的数据时,服务器进程才去读磁盘。
1、无索引,直接去读表数据存放的磁盘块,读到数据缓冲区中再查找需要的数据。
2、有索引,先读入索引表,通过索引表直接找到所需数据的物理地址,并把数据读入数据缓冲区中。

索引有什么副作用吗?

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

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

(3)索引并不是越多越好,太多索引会占用很多的索引表空间,甚至比存储一条记录更多。
对于需要频繁新增记录的表,最好不要创建索引,没有索引的表,执行insert、append都很快,有了索引以后,会多一个维护索引的操作,一些大表可能导致insert 速度非常慢。

 

 

 

喜欢本文的朋友们,欢迎关注微信公众号“Java面试达人”,收看更多精彩内容

 

在MySQL中,使用InnoDB存储引擎时,索引优化是提升查询速度的关键。首先,应该明确不同类型索引的作用和性能影响。例如,PrimaryKey索引是数据检索的基础,Unique索引保证了数据的唯一性,而组合索引能够优化涉及多个列的查询。 参考资源链接:[深入理解MySQL索引:InnoDB存储引擎解析](https://wenku.youkuaiyun.com/doc/7bpno4fzn0) 为了优化索引,需要考虑以下几点: 1. 识别高频查询的列,特别是WHERE子句、JOIN条件以及ORDER BY子句中的列,这些列应当优先考虑建立索引。 2. 利用组合索引时,要仔细设计列的顺序,确保查询中出现的列顺序与索引顺序一致,以达到最佳的查询效率。 3. 对于经常更新的数据表,应当评估是否需要对非关键性列创建索引,以避免过多索引带来的写操作性能下降。 4. 定期使用EXPLAIN命令分析查询执行计划,查看索引是否被有效利用,并根据分析结果调整索引策略。 5. 使用ANALYZE TABLE命令更新表的索引统计信息,帮助优化器做出更合理的查询优化决策。 此外,《深入理解MySQL索引:InnoDB存储引擎解析》这篇文章详细解析了不同索引类型及其对性能的影响,它是一个很好的学习资源,可以为你提供系统的知识框架和实用的索引管理技巧。通过深入学习,你可以更有效地管理InnoDB的索引,进一步提高查询速度和整体数据库性能。 参考资源链接:[深入理解MySQL索引:InnoDB存储引擎解析](https://wenku.youkuaiyun.com/doc/7bpno4fzn0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值