Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么当我在WHERE子句中指定ROWNUM时,SQL查询比指定日期范围时慢_Sql_Oracle_Oracle11g_Query Performance - Fatal编程技术网

为什么当我在WHERE子句中指定ROWNUM时,SQL查询比指定日期范围时慢

为什么当我在WHERE子句中指定ROWNUM时,SQL查询比指定日期范围时慢,sql,oracle,oracle11g,query-performance,Sql,Oracle,Oracle11g,Query Performance,我正在尝试实现大型数据集的分页。我想这可能有用 选择asortyment.nazwa作为nazwa, parpoz.ilosc作为ilosc, 帕波兹·塞纳布托作为塞纳, parnagl.data作为数据 来自帕尔纳格尔 ParPoz.ParNaglID=ParNagl.ParNaglID上的内部联接ParPoz 在asortyment.poztowid=parpoz.poztowid上内部连接asortyment asortyment.grupaptid=grupapt.grupaptid上的

我正在尝试实现大型数据集的分页。我想这可能有用

选择asortyment.nazwa作为nazwa,
parpoz.ilosc作为ilosc,
帕波兹·塞纳布托作为塞纳,
parnagl.data作为数据
来自帕尔纳格尔
ParPoz.ParNaglID=ParNagl.ParNaglID上的内部联接ParPoz
在asortyment.poztowid=parpoz.poztowid上内部连接asortyment
asortyment.grupaptid=grupapt.grupaptid上的内部联接gruppt

其中ROWNUM信息太少,无法回答问题。如果没有模式,很难猜测QO可能在做什么。如果没有模式,如果我们有执行计划,我们仍然可以取得进展。但执行计划也没有给出

我们必须记住,在没有限制
WHERE
子句的情况下,正确执行查询要求数据库可能需要尽可能地生成所有可用行。然后,它将只产生前10个。。。不管是什么,因为没有订单

但是使用限制性的
WHERE
子句,查询计划可能不要求这样一个完全开放的执行计划是正确的。事实上,它可以首先限制自己查找与日期范围匹配的行。根据索引结构,首先过滤日期可能会快得多

如果20亿行满足无限制的
JOIN
而没有指定日期,该怎么办

如果只有两行与指定的日期范围匹配,而这两行中只有一行符合
JOIN
标准,该怎么办

您认为这两个查询中哪一个执行得更快


因此,我猜下一条信息缺失是显而易见的:您希望查询做什么?在没有排序的情况下使用
ROWNUM
限制是非常奇怪的,但也许你有一个有趣的例子,它很有用。OTOH,如果使用日期范围更快。。。为什么不使用日期范围?

您可以发布查询的解释计划吗?您可以同时使用这两种计划吗?查看解释计划…我希望rownum在所有数据累积后完成…而日期筛选器正在减少数据prejoin@Mech我觉得做日期范围是次优的,它会产生不一致的块大小。。。我宁愿在这里有某种形式的正确分页。如果你也在进行排序,那么使用rownum不是很有意义吗?我只是想实现分页,似乎日期范围就是一种方式。。。