gpt4 book ai didi

sql - 为什么并行运行简单查询会使其更快?

转载 作者:行者123 更新时间:2023-12-03 19:01:59 25 4
gpt4 key购买 nike

如果我们看一个像这样的简单查询:

SELECT * FROM CUSTOMER2;
我们可以通过查看它看出它只做一件事,从 CUSTOMER2 中检索所有内容。
现在我的问题是,为什么当我们像这样运行它时:
SELECT/*+ PARALLEL(CUSTOMER2, 8) */ * FROM CUSTOMER2;
它的成本(根据执行计划)从 581 到 81?既然它只有一个任务,那么它不就是在同一个线程上执行的吗?
我可以理解是否需要完成两个全表扫描,因为您可以在并行线程中运行这两个,以便它们同时执行。但在我们的例子中,只有一次全表扫描。
那么当没有什么可以“并行”运行它时,并行运行它如何使它更快?
最后,当我更改我的个人集群和一个表以使其在执行任何操作时并行运行时,我没有看到任何成本变化,就像我在小语句中所做的那样。
这是我个人的:
SELECT AVG(s.sellprice), s.qty, s.custid   
FROM CUSTOMER_saracl c, sale_saracl s
WHERE c.custid = s.custid
GROUP BY (s.qty, s.custid)
HAVING AVG(s.sellprice) >
(SELECT MIN(AVG(price))
FROM product_saracl
WHERE pname
LIKE 'FA%'
GROUP BY price);
为什么会这样?
感谢您的帮助,我今天刚刚了解了并行执行,所以放轻松吧哈哈!

最佳答案

关于关系数据库的一个非常重要的一点是表表示无序集合。这意味着可以按任何顺序扫描为表格扫描的页面。
Oracle 实际上利用这一点来并行扫描单个表。将结果重新组合在一起需要额外的开销,这就是估计成本是 81 而不是 73 (581/8) 的原因。
我想这个documentation有很好的例子来解释这一点。有些非常接近您的查询。
请注意,并行性不仅适用于读取表。事实上,它更常与其他操作相关联,例如连接、聚合和排序。

关于sql - 为什么并行运行简单查询会使其更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64493487/

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