Postgresにはまだインデックススキップスキャンはありませんが、それをエミュレートします:
WITH RECURSIVE cte AS (
( -- parentheses required
SELECT product_id
FROM tickers
ORDER BY 1
LIMIT 1
)
UNION ALL
SELECT l.*
FROM cte c
CROSS JOIN LATERAL (
SELECT product_id
FROM tickers t
WHERE t.product_id > c.product_id -- lateral reference
ORDER BY 1
LIMIT 1
) l
)
TABLE cte;
(product_id)
にインデックスを付ける およびテーブル内の40の一意の製品IDのみ これは高速である必要があります 。大文字でF 。(product_id, trade_id)
のPKインデックス それにもいいです!
product_id
あたりの行数はごくわずかです。 (データ分散の反対)、DISTINCT
/ DISTINCT ON
同じくらい速いかもっと速いでしょう。
インデックススキップスキャンを実装するための作業が進行中です。
参照:
- 各GROUPBYグループの最初の行を選択しますか?
- GROUP BYクエリを最適化して、ユーザーごとに最新の行を取得します
- 複合インデックスは、最初のフィールドのクエリにも適していますか?