2011年11月01日   码农之路   4,259 次浏览

在一次查询当前用户下有多少张表时用到了以下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建立自己的表,用来存储大型表的统计信息,然后通过定时程序对这张表更新,自己建立表的话还可以设计成适用于带条件的统计查询。

赞 赏
申明:除非注明,本站文章均为原创,转载请以链接形式标明本文地址。 如有问题,请于一周内与本站联系,本站将在第一时间对相关内容进行处理。
本文地址: http://www.yyjjssnn.cn/articles/650.html
相关阅读: Oracle

>>> Hello World <<<

这篇内容是否帮助到你了呢?

如果你有任何疑问或有建议留给其他朋友,都可以给我留言。

:wink: :twisted: :surprised: :smile: :smile9: :smile8: :smile7: :smile6: :smile5: :smile56: :smile55: :smile54: :smile53: :smile52: :smile51: :smile50: :smile4: :smile49: :smile48: :smile47: :smile46: :smile45: :smile44: :smile43: :smile42: :smile41: :smile40: :smile3: :smile39: :smile38: :smile37: :smile36: :smile35: :smile34: :smile33: :smile32: :smile31: :smile30: :smile2: :smile29: :smile28: :smile27: :smile26: :smile25: :smile24: :smile23: :smile22: :smile21: :smile20: :smile1: :smile19: :smile18: :smile17: :smile16: :smile15: :smile14: :smile13: :smile12: :smile11: :smile10: :smile0: :sad: :rolleyes1: :redface: :razz: :question: :neutral: :mrgreen: :mad: :lol: :idea: :exclaim: :evil: :eek: :cry: :cool: :confused: :biggrin: :arrow:

友情链接: 程序员刘杨 刘杨
Copyright 2003~2018 保留所有权利 | 网站地图
备案号:湘ICP备14001005号-2

湘公网安备 43011102001322号