Oracle 分区表 - 如何计数

标签 oracle oracle11g partitioning

我在 Oracle (11g) 上有一个分区表 (MYTABLE)。 这是一个相当大的表,按 INSERT_DATE 列(没有时间)分区。

问题是,Count(*) 给出了不正确的结果

下面的查询返回:5,726,829,673

SELECT count(*) FROM MYTABLE WHERE INSERT_DATE >= TO_DATE('01/01/2015', 'DD/MM/YYYY')

下面的查询返回:13,076,228,720

SELECT SUM(1) FROM MYTABLE WHERE INSERT_DATE >= TO_DATE('01/01/2015', 'DD/MM/YYYY')

这怎么可能?造成这种差异的原因是什么?

最佳答案

检查两个查询的执行计划的 Note 部分 - 是否有计划管理功能导致查询使用完全不同的计划?运行 explain plan for SELECT ... 然后 select * from table(dbms_xplan.display); 以查明 Oracle 是否以不同方式运行查询。

例如,DBA 可能在 count(*) 版本上创建了 SQL 配置文件,强制优化器使用索引,而该索引已损坏,需要重建。

或者一些邪恶的开发人员使用 DBMS_ADVANCED_REWRITE 逐字更改查询文本,但仅针对其中一个语句。检查 DBA_REWRITE_EQUIVALENCES 中的任何条目。

关于Oracle 分区表 - 如何计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45304296/

相关文章:

sql - Oracle 中是否有等同于 TRY_CONVERT() 的函数?

sql - 按月分组的打开项目的 Oracle SQL 查询计数

sql - 将 PL/SQL 代码运行到 Oracle 11g Express Edition - 错误

java - oracle 11g以及hibernate spring和jsf的集成

sql-server - 如何在 SQL Server 中结合水平和垂直分区

java - ORA-00905: 缺少关键字 Hibernate 查询 Oracle

mysql - 将 mysql(重复键)查询转换为 oracle 合并

sql - sql中的序列错误。此处不允许使用序列号

azure - 跨多个 Azure 数据磁盘分区的数据库的性能

hive - 过滤 Spark 分区表在 Pyspark 中不起作用