-> Index Only Scan using tgroup_point on tgroup (cost=0.43..522965.94rows=11534336width=4)
-> CTE Scan on cte (cost=0.00..230686.72rows=11534336width=8)
(5 rows)
Time: 0.909 ms
总结
看来没有 WHERE 或其他条件过滤数据而且数据量非常大的情况下,不适宜使用CTE表达式,因为它本质是一个一次性视图,生成一张这么大的视图,性能也快不到哪里去(可能使用物化视图会好点,不过没有测试过)。在大量数据情况下,还是使用普通的全表扫描比使用生成CTE再全表扫描来得快。这也应验了之前翻译篇文章的强调:CTE表达式的作用,真的不是为了加快查询速度,而仅仅是为了方便。冏 ~~。