2011年11月01日   码农之路   4,248 次浏览
在一次查询当前用户下有多少张表时用到了以下SQL:
1 SELECT COUNT(*) FROM USER_TABLES;
便开始学习这张表,USER_TABLES是一张存放着表相关信息的视图,比如表名、字段数、记录数……
于是就可以使用以下SQL得到某张表的记录数:
2 SELECT NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME = ‘TABLE_NAME’;
会发现这条SQL的持行速度非常的快,看到这不知道大家有什么样的想法呢?
没错,我们在实际使用中对拥有上千万级数据的大型表统计速度非常慢,例如在前台分页展示数据时所带的分页统计。
那么我们是否可以将前台展示分页数据的统计SQL换成这条呢?那样统计速度将会有质的提升。
很遗憾,到现在为止答案还是否定的,因为USER_TABLES这张视图的数据不是实时刷新的,需要我们用以下SQL来更新数据:
3 ANALYZE TABLE TABLE_NAME ESTIMATE STATISTICS;
那么问题就来了,我们在每次持行2SQL之前都得持行3SQL,但是不知道ANALYZE的速度有多快,如果对于千万级的数据也能很快的持行就OK了,希望哪位高手能够分析出来。
还有一种方法就是我们如果可以让其自动刷新就更好了,因为这个是由ORACLE控制的,不过到现在还没有找到方法,如果有哪位ORACLE牛人知道方法还望共享出来。
下面我们来讨论一下应用范围,因为2SQL得到的是某张表的所有记录,如果某个统计需要带条件查询的话就没有办法使用这个方法了。所以,这种方法只适应于对全表分页查询时。
当然我们也可以模拟USER_TABLES建立自己的表,用来存储大型表的统计信息,然后通过定时程序对这张表更新,自己建立表的话还可以设计成适用于带条件的统计查询。
>>> Hello World <<<
这篇内容是否帮助到你了呢?
如果你有任何疑问或有建议留给其他朋友,都可以给我留言。