概述

很多时候我们在做优化的时候总会判断是不是全表扫描,看是不是需要建立索引,下面介绍怎么找出执行全表扫描或者 Fast Full Index 扫描的 SQL 语句,判断这些扫描是否是必要的,是否导致了比较差的执行计划,如果是,则需要调整这些 SQL 语句。

7dd3d458e7d36f9e9c27d030683825e4.png

思路:从 Oracle 9i 开始提供了一个视图 v$sql_plan,可以很快地帮助我们找到那些全表扫描或Fast Full Index 扫描的 SQL 语句,这个视图会自动忽略关于数据字典的 SQL 语句。

查找全表扫描的 SQL 语句

使用FTS的前提条件:在较大的表上不建议使用全表扫描,除非取出数据的比较多,超过总量的5% – 10%,或你想使用并行查询功能时。

select sql_text from v$sqltext t, v$sql_plan p where t.hash_value=p.hash_value and p.operation='TABLE ACCESS' and p.options='FULL' order by p.hash_value, t.piece; 
6620e65edefaa2cbe2b61376452ea260.png

查找 Fast Full Index 扫描的 SQL 语句:

索引快速全扫描(INDEX FAST FULL SCAN)和索引全扫描(INDEX FULL SCAN)极为类似,它也适用于所有类型的B树索引(包括唯一性索引和非唯一性索引)。和索引全扫描一样,索引快速全扫描也需要扫描目标索引所有叶子块的所有索引行。

select sql_text from v$sqltext t, v$sql_plan p where t.hash_value=p.hash_value and p.operation='INDEX' and p.options='FULL SCAN'order by p.hash_value, t.piece;
33b9c70e53d3c8738dd27ec553a9b39b.png

今天主要介绍怎么去查找数据库里面的全表扫描或Fast Full Index 扫描的 SQL 语句,后面再对FTS、index fast full scan、index full scan等等做个区别解释,感兴趣的朋友可以关注下!!

06299fa4015406dd93e5edf9b1260d1f.gif
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐