当前位置: 首页 > 知识库问答 >
问题:

Oracle上SELECT*和SELECT COUNT(*)之间的结果大小不同

吴和硕
2023-03-14

我在oracle数据库上有一个奇怪的行为。我们制作了大约310万条记录的巨大插入。到目前为止一切都很好。

插入完成后不久(大约 1 太 10 分钟),我执行两个语句。

  1. 从表中选择计数(*)。
  2. 从表中选择*

第一条语句的结果很好,它给出了插入的行的确切数量。

第二个语句的结果现在是问题所在。例如,根据时间的不同,返回的行数比第一个语句的结果低约 500K。两种结果的差异随着时间的推移而减少。

因此,在两个语句返回相同行数之前,我必须等待15到30分钟。

我已经和甲骨文dba谈过这个问题,但他不知道这是如何发生的。

有什么想法、问题或建议吗?

更新

当我只选择索引列时,我得到了正确的行数。当我选择非索引列时,我又得到了错误的行数。

共有3个答案

蔡明贤
2023-03-14

我认为您应该检查执行计划以识别缺少的索引以提高性能。添加缺少的索引并检查结果。

为什么缺少索引是无效的:

要计算行数,Oracle引擎无需进行抛出分页操作。但是,在从表中获取所有详细信息时,它需要进行分页。

分页过程依赖于在表上创建的索引来有效和快速地获取数据

因此,为了减少第二条语句的时间,您应该找到缺失的索引并创建这些索引。

如何查找丢失的索引:

您可以从DBA_HIST_ACTIVE_SESS_HISTORY开始,查看所有包含该类型提示的语句。

从那里,您可以提取来自该提示的索引名,然后在dba_indexes上进行查找,以查看该索引是否存在、是否有效等。

汤飞羽
2023-03-14

您是否已经用以下内容进行了验证:

1-对单个列而不是* ALL进行计数,以验证两个结果

2-您可以通过添加where子句来验证两个查询的结果,并通过删除条件逐渐选择更多行,以便您可以遇到从两者返回不同值的问题。

霍襦宗
2023-03-14

这对我来说听起来不像是一个错误,如果我理解正确的话,Oracle只是需要时间来获取整个表。毕竟,3 Mil不是一个小数目。

与计数相反,计数带来1条记录和总行数。

如果等待一段时间后,输出的记录数等于count查询返回的记录数,那么一切正常。

 类似资料:
  • 我有这个正则表达式:https://regex101.com/r/vxHtzh/1 我有四场比赛。 但是对于我简单的java代码,我有不同的输出。 输出: 我哪里做错了?

  • 问题内容: 我有一个大问题。我使用此C#函数对消息进行编码: 在Java方面,我使用以下代码段: 我的消息是:阻止|注释|文本!£$%&/()=?^€> <{}ç°§;:_-。,@#ùàòè+ 我有这个结果: 你能帮我吗??谢谢… 问题答案: 我的猜测是您似乎正在将ASCII字节与Latin1字节进行比较。尝试切换 对此 那可能会解决您的问题。 (或切换C#以使用Latin1) 程序中发生的事情是

  • 问题内容: 我正在尝试构建一个应用程序,该应用程序使用流音频输入(例如:麦克风中的一条线),并使用IBM Bluemix(Watson)进行语音转文本。 我简要修改了此处找到的示例Java代码。此示例发送一个WAV,但是我发送的是FLAC …这[无关]不相关。 结果很差,非常差。这是使用Java Websockets代码时得到的: 现在,将上面的结果与下面的结果进行比较。这些是发送相同内容但使用c

  • 问题内容: 我有两个不同的程序,分别希望在Python和Java中使用Murmur3散列相同的字符串。 Python版本2.7.9: 给出79267961763742113019008347020647561319L。 Java是Guava 18.0: 给出字符串“ 6778ad3f3f3f96b4522dca264174a23b”,转换为BigInterger给出1375370730566806

  • 问题内容: 我有一个bash脚本( ScreamDaemon.sh ),其中添加了一个示例尚未运行的检查。 通常情况下,如果有脚本运行没有另一个副本, 的ps aux | grep ScreamDaemon.sh | wc -l应该返回 2 (它应该找到自己和 grep ScreamDaemon.sh ),但是它返回 3 。 因此,我尝试分析会发生什么,并在添加一些回声后看到: 我已经在脚本中添加

  • 我正在Windows 8.1 64位上开发java swing应用程序,带有4GB内存和JDK版本8u20 64位。 问题是当我使用带有监视器选项的Netbeans profiler启动应用程序时。 加载第一个Jframe时,应用程序Memory Heap约为18mb,JVM进程大小约为50mb(Image1)。 然后,当我启动另一个Jframe时,它包含一个带有webView的JFxPanel,