Я пытаюсь понять, как извлечь данные из JSON
файлов в PostgreSQL
с определенными условиями фильтрации.
Вот мой запрос,
создан индекс, как показано ниже,
CREATE INDEX idx_startTimeL_n
ON mytable USING btree
(((data -> 'info'::text) ->> 'startTimeL'::text) )
Если я выполню запрос выбора объяснения
EXPLAIN SELECT * FROM mytable
WHERE (((data -> 'info'::text) ->> 'startTimeL'::text)::double precision) <= (date_part('epoch'::text, now()) * 1000::double precision)
AND ((data -> 'info'::text) ->> 'startTimeL'::text)::double precision) >= (date_part('epoch'::text, now()) * 1000::double precision - 3600000::double precision)
LIMIT 400000;
Результаты планировщика запросов будут,
"Limit (cost=0.00..36371.90 rows=220700 width=1568)"
" -> Seq Scan on mytable (cost=0.00..36371.90 rows=220700 width=1568)"
" Filter: (((((data -> 'info'::text) ->> 'startTimeL'::text))::double precision <= (date_part('epoch'::text, now()) * '1000'::double precision)) AND ((((data -> 'info'::text) ->> 'startTimeL'::text))::double precision >= ((date_part('epoch'::text, now()) * '1000'::double precision) - '3600000'::double precision)))"
Итак, вот мой вопрос, почему вместо этого происходит seq scan
index scan
хотя таблица проиндексирована с условием фильтра?