intarray
列feature_value_ids
のマテリアライズドビュー(~100k行)があります。私が望むのは、マテリアライズド・ビューでのいくつかの条件に基づいて、その列からすべてのユニークIDを選択することです。DISTINCT以上の膨大なネストなし
この問合せはok、aproxで実行されます。 30ミリ秒〜1つのミルの行を与える:〜を与える、〜私はDISTINCT追加した場合、クエリはに落ちる。しかし、5kの行
SELECT DISTINCT unnest(feature_value_ids) FROM dematerialized_products
WHERE is_private = 'f' AND product_category_ids && ARRAY [38]
を400msのを
SELECT 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
は、再帰クエリが毎回評価するんですので、これは推測