数据库版本:Oracle 10G
今天查询下数据库中一个表的具体记录数,使用
select count(1) from [tablename],执行起来速度非常慢,所以想看看是否有更好的办法,发现,在tabs表已经存在了该表记录数据了,直接运行如下sql就可以了
select TABLE_NAME, CC.num_rows, CC.last_analyzed
from tabs CC
经过查询资料发现,从tabs表中获取的数据不是非常准确,在tabs表中存在一个字段last_analyzed,有最后分析的日期,好像都不是最新,可能导致数据不是非常准确,可以通过在command下面执行EXEC dbms_stats.gather_table_stats('【空间名称】','【tablename】',cascade=>true);,可以刷新tabs表中的num_rows列,以及最后更新时间
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as rep_hea
SQL> EXEC dbms_stats.gather_table_stats('【username】','【tablename】',cascade=>true);
--单个表统计数据的统计数据更新
PL/SQL procedure successfully completed
SQL> EXEC dbms_stats.gather_schema_stats('【username】',estimate_percent=>100,cascade=> TRUE);
--更新整个用户所有表的统计数据更新
select TABLE_NAME, CC.num_rows, CC.last_analyzed
from tabs CC
执行完毕之后,发现last_analyzed变成了刚才执行 dbms_stats时间
问题的起因:最近发现一张分区表:从dba_table得到的统计信息跟 dba_tab_stats/dba_tab_partitions查得的信息出入很大,后来查得的原因是: 脚本里调用dbms_ddl来收集统计信息,而dbms_ddl实际上是调用analyze命令,analyze基本上不会用来收集统计信息了。我们通常是调用dbms_stats来统计的。
即使数据量出现大的变动,analyze也不会反映到dba_tables,这就再次说明用analyze来收集统计信息是存在问题的,正当途径还是用dbms_stats来收集。这个脚本也不知是哪位大佬写的。
http://pingshx.itpub.net/post/39434/497343
分享到:
相关推荐
例如,要获取表中所有记录的总数,可以创建一个CRecordset子类,重写Open函数并执行SQL COUNT(*)语句: ```cpp class CRecordCountSet : public CRecordset { public: CRecordCountSet(CDatabase* pDatabase); ...
- `TRUNCATE`命令快速删除表中的所有数据,它不触发任何删除触发器,也不记录删除动作,因此执行速度快,但无法回滚。 - `DELETE`命令逐条删除记录,并记录每一条删除记录的动作,支持事务控制和触发器,但执行...
### Oracle数据库操作命令详解 #### 一、SQLPlus启动与用户连接 - **启动SQLPlus:** - 在DOS环境下通过`sqlplus 用户名/密码 as sysdba`来启动SQLPlus并登录到Oracle数据库。例如,登录系统账户时可使用`c:>...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,由甲骨文公司开发和维护。它提供了丰富的功能,包括数据存储、管理和检索,适用于各种规模的企业和组织。本篇将深入探讨Oracle数据库的基本查询知识,...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。对于初学者来说,掌握Oracle数据库的基础命令是学习的关键步骤。以下将详细介绍Oracle数据库的一些常用命令,帮助你快速...
在本文中,我们将深入探讨如何使用PHP与Oracle数据库进行交互,特别是实现分页显示数据的功能。首先,我们有一个名为`ora_sql`的PHP类,该类封装了与Oracle数据库的基本操作,包括连接、执行SQL语句以及获取查询结果...
COUNT 函数是 Oracle 数据库中的一个聚集函数,用于计算表中的行数。例如,使用 COUNT 函数可以计算雇员表中的行数。 知识点十:组函数 组函数是 Oracle 数据库中的一个函数,用于对数据进行分组操作。例如,使用 ...
使用`row_count`变量可以获取当前操作影响的记录行数。例如,`row_count:=:system.trigger_record;`会将触发器操作影响的记录数赋值给`row_count`。 2. **设置鼠标状态**: `set_application_property('cursor_...
例如,你可以用`SELECT COUNT(*) FROM table`统计表中的记录数,`SELECT MAX(column) FROM table`找出某列的最大值,或者使用`SELECT column1 || ' ' || column2 FROM table`将两列数据连接成一个字符串。...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。Java软件工程师在开发过程中,往往需要与数据库进行交互,因此掌握Oracle数据库的基本操作和高级技术至关重要。以下是对...
在Oracle数据库中,单表查询和数据连接是日常数据分析和报表生成的重要操作。本文主要讨论了如何统计单表中的字段总数、百分比以及如何进行数据的横向和纵向连接。 首先,我们关注如何在单表中统计某个字段的总数...
` 可以获取表中的所有数据,`SELECT column1, column2 FROM table;` 则只选择指定列。 3. 限定返回的行:通过`LIMIT`(在某些数据库系统中)或`ROWNUM`(在Oracle中)限制返回结果的数量。例如,`SELECT * FROM ...
本文档将详细介绍Oracle数据库中用于日常运维优化的一些常用脚本,包括但不限于统计信息更新、SQL查询性能分析以及系统资源监控等方面。 #### 二、更新统计信息 **脚本:** ```sql SQL> analyze table table_name ...
Oracle数据库在执行SQL查询时,有时会选择不使用已经创建的索引,这可能是由于多种因素导致的。以下是一些常见的原因及其详细解释: 1. **INDEX SKIP SCAN**: 当创建了一个组合索引,但是查询只使用了索引的非第一...
### Oracle数据库SQL性能调优详解 #### 一、选用适合的ORACLE优化器 ORACLE提供了三种优化器供用户选择: 1. **基于规则的优化器(RULE)**:这是一种较为传统的优化方式,它依赖于预定义的规则来确定SQL语句的...
根据提供的信息,我们可以详细解析与Oracle数据库分组查询相关的知识点,并通过具体的练习题目来加深理解。下面将逐一分析每一个题目中的关键知识点。 ### Oracle数据库分组查询知识点详解 #### 1. 查询部门20的...