gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:01:23 25 4
gpt4 key购买 nike

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

select asortyment.nazwa as NAZWA,
parpoz.ilosc as ILOSC,
parpoz.cenabrutto as CENA,
parnagl.data as DATA
from parnagl

inner join ParPoz on ParPoz.ParNaglID=ParNagl.ParNaglID
inner join asortyment on asortyment.poztowid=parpoz.poztowid
inner join grupapt on asortyment.grupaptid=grupapt.grupaptid
WHERE ROWNUM <= 10
这需要 12 秒来执行。
另一方面,如果我使用 WHERE 子句指定日期范围,它只需要 50 毫秒......有什么办法可以优化它?
数据库是Oracle 11g。

最佳答案

信息太少,无法回答这个问题。没有模式,很难猜测 QO 可能在做什么。没有模式,如果我们有执行计划,我们仍然可以取得进展。但是也没有给出执行计划。
我们必须记住,没有限制WHERE子句,查询的正确执行要求数据库可能需要彻底尝试生成所有可用的行。然后,它将只产生前 10 个……不管它们是什么,因为没有给出顺序。
但有限制 WHERE子句,查询计划可能不要求这样一个广泛开放的执行计划是正确的。事实上,它可以首先限制自己查找与日期范围匹配的行。根据索引结构,首先过滤日期可能会快得多。
如果 20 亿行满足无限行会怎样JOIN没有指定日期?
如果只有 2 行只匹配指定的日期范围,然后这两个行中只有一个符合 JOIN标准?
您认为这两个查询中哪个会执行得更快?
所以我猜下一条信息缺失很明显:您希望查询做什么?使用 ROWNUM没有排序的限制非常奇怪,但也许你有一个有趣的案例,它很有用。 OTOH,如果使用日期范围更快......为什么不使用日期范围?

关于sql - 为什么当我指定 ROWNUM 时,我的 SQL 查询比在 WHERE 子句中指定日期范围时慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63550943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com