我有一个简单的查询:
select * from tags where tags.taggable_type = 'Skill';
大致需要:
Seq Scan on tags (cost=0.00..378.81 rows=11775 width=77) (actual time=0.019..7.092 rows=11775 loops=1)
Filter: ((taggable_type)::text = 'Skill'::text)
Rows Removed by Filter: 4610
Planning time: 0.098 ms
Execution time: 8.536 ms
(5 rows)
检索这些记录。我创建了一个物化视图,希望检索的时间会急剧减少,但实际上我在运行mat查询时得到了这个:
explain analyze select * from skill_matview;
Seq Scan on skill_matview (cost=0.00..239.75 rows=11775 width=76) (actual time=0.078..5.481 rows=11775 loops=1)
Planning time: 1.562 ms
Execution time: 6.900 ms
(3 rows)
我错过了什么,我一直在四处看看,一切都在吹嘘一些非常好的查询减少时间,但我在这里没有看到。
编辑:
CREATE MATERIALIZED VIEW skill_matview AS select * from tags where tags.taggable_type = 'Skill';
答案 0 :(得分:2)
在您的案例中,物化视图没有多大好处。
原始查询必须扫描整个16385行,而WHERE
条件只删除其中的4610行。
因此物化视图大约是表格的四分之三,对它的连续扫描将花费大约四分之三的时间,这大致与您观察到的一致。
此外,9毫秒并不是那么糟糕,是吗?