J'ai une vue matérialisée (~ 100k lignes) avec une colonne intarray
feature_value_ids
. Ce que je veux est de sélectionner tous les identifiants uniques de cette colonne, en fonction de certaines conditions sur la vue matérialiséeDISTINCT sur énorme unnest
Cette requête s'exécute ok, aprox. 30 ms, ce qui donne ~ 1 lignes de mil:
SELECT unnest(feature_value_ids) FROM dematerialized_products
WHERE is_private = 'f' AND product_category_ids && ARRAY [38]
Cependant, si j'ajoute DISTINCT, requête tombe à ~ 400ms, donnant ~ 5k lignes
SELECT DISTINCT unnest(feature_value_ids) FROM dematerialized_products
WHERE is_private = 'f' AND product_category_ids && ARRAY [38]
J'ai essayé de faire une requête récursive sans chance (~ 35s), comme ceci:
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
Je suppose que cela est dû au fait z
évalue chaque fois que requête récursive ne