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

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如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

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