Oracle分区表 - 如何计算

问题描述 投票:3回答:1

我在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')

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

oracle oracle11g partitioning
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.