gpt4 book ai didi

sql - 为什么在 Postgres 中将带有 NOT IN 的 where 子句添加到慢的 SQL

转载 作者:行者123 更新时间:2023-11-29 12:54:04 26 4
gpt4 key购买 nike

我写了一个看起来很简单的SQL查询,主键x的tableA,ytime是时间戳字段。

select a.x, b.z from 
# tableA join tableB etc.
where a.id not in (select x from tableA where a.ytime is not null)

还有另一个与此类似的堆栈流,但它只讨论较小的数据子集。

Why SQL "NOT IN" is so slow?

不确定我是否需要索引 ytime 列。

最佳答案

我没有科学来支持这一点——只有先例历史,但对于“in”列表非常大的情况,我发现半连接(或本例中的反连接)通常很多比 in 列表更有效:

select a1.x, b.z
from
tableA a1
join tableB b on ...
where not exists (
select null
from tablea a2
where a1.id = a2.x and a2.ytime is not null
)

当我说重要时,一个查询比使用 in-list 运行了几分钟在我将其更改为 semi 后仅几秒钟就运行了。

尝试一下,看看是否有所不同。

我做了一些假设,因为您的代码主要是概念性的,但我认为您明白了。

关于sql - 为什么在 Postgres 中将带有 NOT IN 的 where 子句添加到慢的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47572266/

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