gpt4 book ai didi

sql - 最好在 JOIN 之前或之后提取字段?

转载 作者:行者123 更新时间:2023-11-29 13:18:18 24 4
gpt4 key购买 nike

我正在使用 Postgres 9.6。我有两个表,storyslide:slide 有一个指向 story 的外键。

像这样的标准 JOIN 查询在性能方面是否有任何差异:

SELECT story.*, slide.name, slide.story_id 
FROM story
JOIN slide ON story.id=slide.story_id
WHERE slide.index=0;

还有一个像这样的子查询,它首先提取感兴趣的字段,然后才加入它们:

SELECT story.*, slide.name, slide.story_id 
FROM story
JOIN (SELECT * FROM slide WHERE index=0) slide
ON story.id=slide.story_id;

我一直在查看 EXECUTION ANALYSE 的输出,看起来两者的执行计划完全相同。

如果在性能方面没有差异,那么在风格上一个比另一个更可取吗?

最佳答案

第一个最好是风格上的。 .万一。我会使用表别名来编写它:

SELECT st.*, sl.name,
sl.story_id -- unnecessary
FROM story st JOIN
slide sl
ON st.id = sl.story_id
WHERE sl.index = 0;

而且,您为什么选择 sl.story_id?它只是重复 st.id

“以防万一”是因为一些数据库实现了子查询(不是 Postgres,至少不是一直如此)——这增加了额外的开销。此外,子查询实际上并没有使逻辑更易于理解。我非常喜欢子查询,但不会在不必要时使用它们。

关于sql - 最好在 JOIN 之前或之后提取字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45975780/

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