概述
很多时候我们在做优化的时候总会判断是不是全表扫描,看是不是需要建立索引,下面介绍怎么找出执行全表扫描或者 Fast Full Index 扫描的 SQL 语句,判断这些扫描是否是必要的,是否导致了比较差的执行计划,如果是,则需要调整这些 SQL 语句。
![7dd3d458e7d36f9e9c27d030683825e4.png](https://i-blog.csdnimg.cn/blog_migrate/51d0da6904c536235703ffeb714109f2.jpeg)
思路:从 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](https://i-blog.csdnimg.cn/blog_migrate/395dacb41ee04abf3a7b7d7ae578591b.jpeg)
查找 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](https://i-blog.csdnimg.cn/blog_migrate/3944e72ad21df0e731a3d702fb8c9a41.jpeg)
今天主要介绍怎么去查找数据库里面的全表扫描或Fast Full Index 扫描的 SQL 语句,后面再对FTS、index fast full scan、index full scan等等做个区别解释,感兴趣的朋友可以关注下!!
![06299fa4015406dd93e5edf9b1260d1f.gif](https://i-blog.csdnimg.cn/blog_migrate/69a255e7388a2411852d5affb2fb04ba.gif)