Oracle 之索引,妙不可言(一)

索引和表一样,都是逻辑结构中段的段的一种。索引是建在表的具体列上,它存在的目的是让表查询更快,效率更高。表丢失关乎生死,索引丢失可以重建。

  • 索引全表扫描:INDEX FULL SCAN
    • 当使用索引的时候,如果索引不能满足查询语句的条件,Oracle会进行全表扫描,这通常称为索引的全表扫描。索引的全表扫描是通过读取表中所有的数据块来获取查询结果的。
    • 一种访问表数据的方式,它会扫描表中的所有行,然后进行相关数据操作。
    • 全表扫描的性能相对比较低,因为它需要读取所有的数据块,并扫描整个表,所以通常不建议在大型表上执行全表扫描操作。
    • 在执行索引全表扫描的时候,Oracle会在执行计划中显示FULL SCAN或FULL TABLE SCAN关键字,它们表示使用了全表扫描操作。为了提高全表扫描的性能,应该尽量使用合适的索引来提高查询的性能。
    • 当然,在某些情况下,全表扫描是必不可少的,比如在表中没有适合的索引或者需要进行大数据量的操作时,全表扫描是无法避免的。
    • 顺序读,可以让排序消除
      • 注:顺序读(Sequential Read)是指从硬盘读取连续块的数据,即按照存储在磁盘上的顺序逐块读取数据。由于数据是连续的,因此可以通过预读技术提高读取效率。顺序读通常用来处理大量的数据读取,例如数据仓库的扫描操作。
  • 索引快速全扫描:INDEX FAST FULL SCAN
    • 如:SELECT column1, column2 FROM table_name;
    • 虽然减少了逻辑读但无法消除排序
  • 应用好索引提高SQL语句性能
    • 索引是一种特殊的数据结构,它可以帮助数据库系统快速地查询和检索数据。当SQL语句中包含WHERE和JOIN等操作时,数据库会自动检测是否存在索引并使用之,以提高检索性能和响应速度。
    • 当数据库中的数据量非常大时,如果没有索引的支持,查询数据需要扫描整个数据表,这将非常耗时,甚至可能导致数据库崩溃。而通过创建合适的索引,可以将查询数据的时间大大降低,提高查询的效率。
    • 在应用中,如果经常需要执行的SQL语句没有被索引优化,查询速度会非常缓慢,导致整个应用的性能下降,甚至出现宕机等问题。因此,应用好索引可以显著提高SQL语句的性能,加快查询速度,提高系统的可用性和稳定性。
    • 全局索引(Global index)指的是对表中所有分区数据的索引,而非局部分区数据的索引。
      • 主要应用场景如下:
        • 分区表维护:当对分区表进行分区切分、分区合并、分区移动等维护操作时,全局索引可以避免因数据移动引起的索引失效问题。
        • 查询全局数据:对于需要查询整个分区表数据的操作,使用全局索引可以减少扫描的行数,加快查询速度。
        • 易于管理:全局索引只需要一份管理,相比于每个分区都有一份索引来说,更加容易管理和维护。
        • 数据仓库查询:当分区表作为数据仓库实现时,全局索引可以优化查询性能,加快数据挖掘和报表生成的速度。
      • 缺点主要包括:
        • 行级锁定:在更新全局索引时可能会导致整个表或整个索引被锁定,影响并发性能。
        • 建立索引耗时:创建全局索引需要相对较长的时间,且空间占用较大。
        • 资源消耗:因为全局索引是对整个表进行操作,所以在对全表进行查询时,可能会消耗大量资源。
      • 总:在应用全局索引时需要根据具体情况进行权衡和优化,避免全局索引造成的性能和管理问题。
    • 局部索引(Local index)指可以在表的子集上创建索引,而不是在整个表上创建。这些子集可以是分区,也可以是分区的一部分(称为局部分区)。
      • 使用优点
        • 增强查询性能:对于大型分区表,创建局部索引可以提高查询性能,因为查询只需要搜索分区表的子集。
        • 减少索引大小:创建局部索引可以减少索引的大小,因为它们只考虑了表的子集。这有助于提高索引的性能。
      • 创建局部索引的建议
        • 创建局部索引之前,请确保分析表并设置标记以确定最佳分区键。
        • 确定哪些分区需要局部索引。考虑哪些分区常常与查询一起使用,并且可以从索引中受益。
        • 创建索引之前,请考虑分区之间的查询模式。如果查询需要跨分区,则不应该创建局部索引,并且应该在整个表上创建索引。
      • 注意事项
        • 索引过多可能会影响表的性能,因此应适当控制索引的数量。
        • 创建局部索引可能会产生额外的开销,因此应该评估这种方法的成本和收益。
        • 如果表有少量分区,则可能没有必要使用局部索引。

此文章为个人的笔记,如有写的不对或你还有什么高见,评论区见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值