【性能调优】快速获得表中记录件数

2023-11-30 06:40

本文主要是介绍【性能调优】快速获得表中记录件数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


在论坛上与一位朋友讨论如何获得表中记录件数时,从maclean老师那里得到提示,发现可以从user_tables或dba_tables表中快速获得表中记录件数。

帖子地址:http://www.itpub.net/forum.php?mod=viewthread&tid=1508469&page=1&extra=#pid18502245

那位朋友的问题贴:
----------------------------------
数据库中有个表每天都有更新删除,追加的操作,如何能查询出这个表每天总共有多少条记录??


大家多帮忙啊
----------------------------------

我的问题确认
----------------------------------
似乎楼主只是想确认一下是否因为数据量增加而导致plsql变慢了。
如果只是想统计一下表中数据记录的件数,来确认一下是否有数据增加,用于问题调查的话,似乎并不麻烦,简单的select count(1) from 表名 即可。  
不知是不是我理解错了楼主问这个问题的本意……
----------------------------------

那位朋友的回帖
----------------------------------
楼上理解的没错,关键问题是我只是知道当前的记录数,过去每天的就无法获得了
----------------------------------

针对上面那位朋友提到的记录保留的问题,我的回帖
----------------------------------
xiaoma0401 发表于 2011-11-5 20:41 
楼上理解的没错,关键问题是我只是知道当前的记录数,过去每天的就无法获得了


其实进行问题调查的话,观察几天或连续一定间隔地观察几次大体就可以判明问题了,
一般次数不会需要太多,所以可以写一组select count(1) from tblname 脚本,然后每次把执行结果保留下来,几次对比即可。(如黏贴到excel中观察)

如果感觉不好对比,也可以专门建一个表,包含表名、记录件数、操作日期 几个字段就可以了,
每次使用insert  into 。。。select  语法,类似如下将检索记录插入到表中即可。
insert into cntTbl (表名,记录件数,操作日期)
select ‘dept’  as name,
          count(1) as cnt,
          to_char(sysdate,'YYYY-MM-DD')  as opdate
from dept
gruop by name,cnt,opdate;
commit;


以上,供参考,希望能有帮助

----------------------------------

maclean老师的回帖,回帖中提到了利用oracle统计信息来获取表中记录件数的思想。
-----------------------------------
xiaoma0401 发表于 2011-11-5 20:41 
楼上理解的没错,关键问题是我只是知道当前的记录数,过去每天的就无法获得了

The old statistics are purged automatically at regular intervals based on the statistics history retention setting and the time of the recent analysis of the system. Retention is configurable using the ALTER_STATS_HISTORY_RETENTION procedure of DBMS_STATS. The default value is 31 days, which means that you would be able to restore the optimizer statistics to any time in last 31 days.

历史统计信息 一般会保留31天。 这些信息包括表的num_rows

------------------------------------

这里先对maclean老师提到的DBMS_STATS.ALTER_STATS_HISTORY_RETENTION 这个存储过程简单介绍一下,资料中的,直接拷贝过来。
---------------

ALTER_STATS_HISTORY_RETENTION

Enable or disable autopurging of statistic histories

dbms_stats.alter_stats_history_retention(retention IN NUMBER);

NULL = change to default value
   0 = never save old stats, autopurge statistics history
   1 = statistics history never purged by autopurge 

exec dbms_stats.alter_stats_history_retention(0);

---------------

下面是我根据maclean老师的提示,做的一个简单的实验。
但是像我在下面“TO楼主”部分提到的,由于user_tables、dba_tables的信息来源于Oracle自动收集的统计信息,而这个信息有时肯那个并非最新的,所以,user_tables、dba_tables的信息一般仅供参考。
如果想使用这两个user_tables、dba_tables来得到准确信息,需要在查询user_tables、dba_tables之前,
对需要查询的表手动执行以下表分析。
analyze table table_name compute statsticstic ;

--------------------------------------------------
本帖最后由 chicheng_cn421 于 2011-11-6 07:43 编辑
maclean 发表于 2011-11-6 00:36 
The old statistics are purged automatically at regular intervals based on the statistics history r ...

跟 maclean 老师又学到新东西,谢谢!

可以利用Oracle自己的统计信息,来得到表中记录的行数。简单做了个实验。
-----------------------------------------------
■在当前用户下查询 user_tables  
SQL> conn scott/tiger
已连接。
SQL>  select table_name,tablespace_name, num_rows,table_lock from user_tables where table_name in ('DEPT','EMP');

TABLE_NAME                     TABLESPACE_NAME                  NUM_ROWS TABLE_LO
------------------------------ ------------------------------ ---------- --------
DEPT                           USERS                                   4 ENABLED
EMP                            USERS                                  14 ENABLED

已选择2行。

SQL> select count(1) from dept;

  COUNT(1)
----------
         4

已选择 1 行。

SQL> select count(1) from emp;

  COUNT(1)
----------
        14

已选择 1 行。

■再换到dba_tables  下查询试试,发现信息一样,而且如果需要查询多个用户下的表的话,使用 dba_tables 更加方便。 
SQL> conn / as sysdba
已连接。
SQL>  select owner,table_name,tablespace_name, num_rows,table_lock from dba_tables where table_name in ('DEPT','EMP');

OWNER                          TABLE_NAME                     TABLESPACE_NAME                  NUM_ROWS TABLE_LO
------------------------------ ------------------------------ ------------------------------ ---------- --------
SCOTT                          DEPT                           USERS                                   4 ENABLED
SCOTT                          EMP                            USERS                                  14 ENABLED

已选择2行。

SQL>

-----------------------------------------------

TO楼主
Oracle的统计信息是定期启动相关Job来自动收集的,
但是,偶有情况,统计信息收集不是很及时,导致我们看到的统计信息不是最新的,
所以这种方法可参考价值很大,但如果 个别表记录件数与想定件数差异较大,建议再利用select count(1) from 表名  的方式再自己手动验证一下。


或着像下面这样先对相关表重新进行表分析,重新收集统计信息后,再查询user_tables或dba_tables。
analyze table table_name compute statsticstic ;
---------------------------------------------------

以上。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20335819/viewspace-710313/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20335819/viewspace-710313/

这篇关于【性能调优】快速获得表中记录件数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/436010

相关文章

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI