gpt4 book ai didi

sql - 练习 “exists (select 1 from …)”来自哪里?

转载 作者:行者123 更新时间:2023-12-03 12:30:16 24 4
gpt4 key购买 nike

我自己的overwhelming majority of people support认为以下语句之间没有区别:

SELECT * FROM tableA WHERE EXISTS (SELECT * FROM tableB WHERE tableA.x = tableB.y)
SELECT * FROM tableA WHERE EXISTS (SELECT y FROM tableB WHERE tableA.x = tableB.y)
SELECT * FROM tableA WHERE EXISTS (SELECT 1 FROM tableB WHERE tableA.x = tableB.y)
SELECT * FROM tableA WHERE EXISTS (SELECT NULL FROM tableB WHERE tableA.x = tableB.y)

但是今天,当我在内部开发人员 session 上提倡 select 1是行之有效的方法,而 select *选择所有(不必要的)数据时,我面对面地提出了相反的主张,从而损害了性能。

我似乎记得曾经有过一些旧版本的Oracle或确实如此,但是我找不到对此的引用。所以,我很好奇- 这种做法是如何产生的?这个神话从何而来?

添加:由于 some people坚持要有证据证明这确实是错误的信念,因此在这里- google query显示了很多人这样说。如果您太懒了,请检查 this direct link,其中一个人甚至比较执行计划以发现它们是等效的。

最佳答案

您问题的主要部分是-“这个神话是从哪里来的?”

因此,要回答这个问题,我想人们通过sql学习到的第一个性能提示是select *在大多数情况下效率低下。因此,在这种特定情况下效率不是很低的事实在某种程度上与直觉相反。因此人们对此持怀疑态度并不奇怪。但是一些简单的研究或实验应该足以消除大多数神话。尽管人类历史有点表明神话很难消除。

关于sql - 练习 “exists (select 1 from …)”来自哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137433/

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