Оптимизация запросов Postgres (принудительное сканирование индекса)

Ниже мой запрос. Я пытаюсь заставить его использовать сканирование индекса, но это будет только последующее сканирование.

Кстатиmetric_data Таблица насчитывает 130 миллионов строк.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;

EXPLAIN:

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[]))

Ответы на вопрос(4)

Ваш ответ на вопрос