索引和表一样,都是逻辑结构中段的段的一种。索引是建在表的具体列上,它存在的目的是让表查询更快,效率更高。表丢失关乎生死,索引丢失可以重建。
- 索引全表扫描: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)指可以在表的子集上创建索引,而不是在整个表上创建。这些子集可以是分区,也可以是分区的一部分(称为局部分区)。
- 使用优点
- 增强查询性能:对于大型分区表,创建局部索引可以提高查询性能,因为查询只需要搜索分区表的子集。
- 减少索引大小:创建局部索引可以减少索引的大小,因为它们只考虑了表的子集。这有助于提高索引的性能。
- 创建局部索引的建议
- 创建局部索引之前,请确保分析表并设置标记以确定最佳分区键。
- 确定哪些分区需要局部索引。考虑哪些分区常常与查询一起使用,并且可以从索引中受益。
- 创建索引之前,请考虑分区之间的查询模式。如果查询需要跨分区,则不应该创建局部索引,并且应该在整个表上创建索引。
- 注意事项
- 索引过多可能会影响表的性能,因此应适当控制索引的数量。
- 创建局部索引可能会产生额外的开销,因此应该评估这种方法的成本和收益。
- 如果表有少量分区,则可能没有必要使用局部索引。
- 使用优点
此文章为个人的笔记,如有写的不对或你还有什么高见,评论区见。