查询: 可以看到下面的查询速度很慢。
那么我们对该字段加上索引又是什么情况呢?
速度依然没有明显
的变化,可以看到执行计划已经使用Index Only Scan了。
同样的SQL我们看看在Oracle中性能如何?
创建测试表:
性能测试:
可以看到Oracle的性能即使不加索引也明显比PostgreSQL中要好。 那么我们在PostgreSQL中是不是没办法继续优化了呢?这种情况我们利用pg中的递归语句结合索引可以大幅提升性能。
SQL改写:
查看执行计划:
可以看到执行时间从原先的8000ms降低到了2ms,提升了几千倍!
甚至对比Oracle,性能也是提升了很多。
但是需要注意的是:这种写法仅仅是针对稀疏列,换成数据分布广泛的字段,显然性能是下降的, 所以使用递归SQL不适合数据分布广泛的字段的group by或者count(distinct)操作。
到此这篇关于PostgreSQL利用递归优化求稀疏列唯一值的文章就介绍到这了,更多相关PostgreSQL递归优化内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!