我有一个简单的问题:

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';

最佳答案

在你的情况下,物化视图并没有什么好处。
原始查询必须扫描整个16385行,而WHERE条件只删除其中4610行。
因此,物化视图大约是表的四分之三大,对它的顺序扫描大约需要四分之三的时间,这与您观察到的大致一致。
再说,9毫秒也不坏,是吗?

关于postgresql - 物化 View 无法按预期工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42651990/

10-09 00:56