gpt4 book ai didi

postgresql - DISTINCT 超过巨大的 unnest

转载 作者:行者123 更新时间:2023-11-29 14:36:19 25 4
gpt4 key购买 nike

我有一个物化 View (约 10 万行),其中有一个 intarrayfeature_value_ids。我想要的是根据物化 View 的某些条件从该列中选择所有唯一 ID

此查询运行正常,大约。 30 毫秒,约 100 万行:

SELECT unnest(feature_value_ids) FROM dematerialized_products               
WHERE is_private = 'f' AND product_category_ids && ARRAY [38]

但是,如果我添加 DISTINCT,查询将下降到 ~ 400 毫秒,给出 ~ 5k 行

SELECT DISTINCT unnest(feature_value_ids) FROM dematerialized_products               
WHERE is_private = 'f' AND product_category_ids && ARRAY [38]

我尝试进行递归查询,但没有成功(~ 35 秒),如下所示:

WITH RECURSIVE t AS (
(SELECT min(value_id) AS value_id FROM z)
UNION ALL
SELECT (SELECT min(value_id) FROM z WHERE value_id > t.value_id) AS value_id
FROM t
WHERE t.value_id IS NOT NULL
), z as (
SELECT unnest(feature_value_ids) as value_id
FROM dematerialized_products a
WHERE is_private = 'f' AND product_category_ids && ARRAY [38]
)

SELECT * FROM t WHERE t.value_id IS NOT NULL

我猜这是因为每次递归查询时 z 都在求值

最佳答案

featured_value_id 数组值在数组中是否唯一?如果不是,如果您通过使计划者变得独特来帮助计划者,是否会有所不同?:

select distinct c.id
from
dematerialized_products
cross join lateral
(
select distinct id
from unnest(feature_value_ids) u (id)
) c

关于postgresql - DISTINCT 超过巨大的 unnest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44130280/

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