以下は私の質問です。インデックススキャンを使用するようにしようとしていますが、seq スキャンのみになります。
ちなみに、metric_data
テーブルには1億3000万行あります。テーブルにはmetrics
約 2000 行あります。
metric_data
表の列:
metric_id integer
, t timestamp
, d double precision
, PRIMARY KEY (metric_id, t)
このクエリで PRIMARY KEY インデックスを使用するにはどうすればよいですか?
SELECT
S.metric,
D.t,
D.d
FROM metric_data D
INNER JOIN metrics S
ON S.id = D.metric_id
WHERE S.NAME = ANY (ARRAY ['cpu', 'mem'])
AND D.t BETWEEN '2012-02-05 00:00:00'::TIMESTAMP
AND '2012-05-05 00:00:00'::TIMESTAMP;
説明:
Hash Join (cost=271.30..3866384.25 rows=294973 width=25)
Hash Cond: (d.metric_id = s.id)
-> Seq Scan on metric_data d (cost=0.00..3753150.28 rows=29336784 width=20)
Filter: ((t >= '2012-02-05 00:00:00'::timestamp without time zone)
AND (t <= '2012-05-05 00:00:00'::timestamp without time zone))
-> Hash (cost=270.44..270.44 rows=68 width=13)
-> Seq Scan on metrics s (cost=0.00..270.44 rows=68 width=13)
Filter: ((sym)::text = ANY ('{cpu,mem}'::text[]))