我在Postgresql中有两个简单的表,第一个有 170万行
CREATE TABLE f_occ(
id_data integer,dur integer
);
第二个表具有 365 行
CREATE TABLE d_data(
id_data serial,full_data date,month SMALLINT,);
为了优化两个表之间的联接,我尝试在id_data上创建一个哈希索引,但这完全被忽略了。为什么会发生这种情况,如何优化查询?当我在表d_data的where处插入条件时,也会发生这种情况。
CREATE INDEX f_occ_id_data ON public.f_occ USING hash (id_data)
EXPLAIN ANALYZE
SELECT d.month,s.dur
FROM d_data d,f_occ s
WHERE d.id_data = s.id_data;
"Hash Join (cost=10.21..34133.23 rows=1705429 width=6) (actual time=1.479..9158.424 rows=1705429 loops=1)"
" Hash Cond: (s.id_data = d.id_data)"
" -> Seq Scan on f_occ s (cost=0.00..29594.29 rows=1705429 width=8) (actual time=0.096..2992.577 rows=1705429 loops=1)"
" -> Hash (cost=5.65..5.65 rows=365 width=6) (actual time=1.352..1.353 rows=365 loops=1)"
" Buckets: 1024 Batches: 1 Memory Usage: 23kB"
" -> Seq Scan on d_data d (cost=0.00..5.65 rows=365 width=6) (actual time=0.030..0.656 rows=365 loops=1)"
"Planning Time: 0.919 ms"
"Execution Time 11727.436 ms"