1条回答
默认
最新
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏
TABLE ACCESS FULL前面没有“*”怎么办?
如果表很小,那么不需理会,小表不会产生性能问题。
如果表很大那么就要询问开发人员是不是忘了写过滤条件,一般不会遇到这种情况。
如果真的是没有过滤条件,比如一个表有10GB,但是没有过滤条件,那么它就会成为整个SQL的性能瓶颈。这个时候就需要查看SQL语句中该表访问了多少列,如果访问的列不多,就可以把这些列组合起来,建立一个组合索引,索引的大小可能只有1GB左右。可以利用INDEX FAST FULL SCAN代替TABLE ACCESS FULL。在访问列不多的情况下,索引的大小(Segment Size)肯定比表的大小(Segment Size)小,那么就不需要扫描10GB了,只需要扫描1GB,从而达到优化目的。
如果SQL语句里面要访问表中大部分列,这时就不应该建立组合索引了,因为此时索引大小比表更大,可以通过其它方法优化,比如开启并行查询,或者更改表连接方式,让大表作为嵌套循环的被驱动表,同时在大表的连接列上建立索引。
评论
有用 5
墨值悬赏