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

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

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

jvm调优常用命令行工具详解

《jvm调优常用命令行工具详解》:本文主要介绍jvm调优常用命令行工具的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一 jinfo命令查看参数1.1 查看jvm参数二 jstack命令2.1 查看现场堆栈信息三 jstat 实时查看堆内存,gc情况3.1