数据库中,索引的作用?为什么能够提高查询速度?(索引的原理)

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

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

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

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

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

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

索引有什么副作用吗?

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

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

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle索引是一种用于加速数据检索的数据结构。它的作用提高查询效率,减少查询所需的时间和资源。 Oracle索引原理是基于B树或B+树的数据结构。树状结构使得索引能够在非常短的时间内定位到需要查询的数据块,大大提高查询的效率。索引按照某种字段或多个字段的值进行排序,并存储了字段值与对应数据块的映射关系。当查询时,Oracle数据库系统会首先搜索索引树,定位到相应的索引节点,然后通过索引节点找到对应的数据块。 使用索引进行查询时,Oracle会首先确定查询条件涉及到的字段是否有对应的索引。如果有索引,则使用索引定位到数据块,然后进行数据读取;如果没有索引,则需要进行全表扫描,逐行检查所有数据,查询效率较低。 索引的设计需要根据具体的业务需求和查询模式进行,通常选择经常作为查询条件的字段作为索引列,以提高查询效率。但是索引也会增加数据的存储空间和数据维护的开销,所以需要权衡索引的数量和使用的场景。 在使用索引时,还需要注意避免对索引列进行频繁的更新和删除操作,因为这会导致索引的维护成本增加并且可能造成索引失效。当需要进行大量的数据修改时,可以考虑临时禁用索引,待数据修改完成后再重新启用索引。 综上所述,Oracle索引通过采用树状结构和映射关系,提高查询效率和减少资源消耗。合理设计和使用索引可以大大提高数据库查询性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值