gpt4 book ai didi

SQL 连接与子查询 - 性能差异

转载 作者:行者123 更新时间:2023-12-02 06:27:14 25 4
gpt4 key购买 nike

什么是执行速度更快 - 编写连接或执行子查询?
喜欢

select * 
from table A
where A.fieldAValue =(select fieldAValue from table B where fieldXValue =101) ;

我的推理是,选择正确的 sql 的决定也取决于数据在表中的结构/定义方式。我是对还是错?

最佳答案

这个问题真的没有办法回答。你想错了。 SQL 查询不是对数据库的关于 的指令怎么样要检索您想要的结果集,它是一个 说明 你想要的数据。如何获得它取决于数据库。

Oracle 会将您的查询重写为执行计划。它将根据您的表、索引、约束、它收集的统计信息搜索它认为最有效的计划,甚至根据数据进行猜测。事实上,您很可能可以使用连接和子查询编写此查询,并且它会导致完全相同的执行计划和相同的性能。

我的建议是编写查询,以便很容易理解发生了什么。只有当性能实际上很差时,您才应该担心它在做什么。 Oracle 非常聪明,很可能会找到一条比您想象的更好的数据路径。

你所拥有的很好,可能是我自己写的查询。你不仅有一个子查询,还有一个 scalar subquery ,它本来可以更好地返回一行或零行。所以,如果您的 fieldXValue在表中不是唯一的,你会得到一个异常(exception)。

标量子查询通常非常好用。它们被缓存,因此即使结果集中有一百万行,查询也可能只运行一次。我会推荐这篇文章(以及 Tom Kyte 写过的所有其他内容):On Caching and Evangelizing SQL

关于SQL 连接与子查询 - 性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55186215/

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