2017-09-12 58 views
0

如何在DBMS(在我的情况的Postgres)处理与执行计划和准备好的声明。如何获得一份声明中工作的执行计划?

查询的参数可以对执行计划主要是由于数据统计了巨大的冲击。

它可能在某些情况下更喜欢使用一个索引数据是否良好地分布,但对于特定的值比较喜欢按顺序进行扫描,因为该参数不判别(通常当所述参数匹配表中的行的> 10%)

如果准备发言,我想总是以提高性能,或者如果一个很好的方式,它更多的是一种“尽力而为”

提前感谢的

编辑:我担心的是运行经常在同一查询,但与其他参数这可能需要改变执行计划。这是非常难以测量准备语句的性能增益VS总是有最准确的执行计划

回答

1

已准备语句是使同一简单的查询遍地跑快的好方法。举例来说,像

insert into table values ($1,$2,$3); 

OTOH它是不是让大丑复杂的报告查询运行速度快,其中在where子句中有什么数据集可以基于改变的好方法。

准备查询的整点是遍地保存查询规划的比较昂贵的一步。对于上面列出的简单插入,运行1000次,计划成本加起来。

OTOH一个大的复杂的报告查询,计划时间是无关紧要的。大多数大型报告查询等都需要几分钟甚至几小时才能运行。计划时间以毫秒为单位,在这里不值得担心。