如何让准备好的声明的执行计划有效?

时间:2017-09-12 17:42:24

标签: postgresql rdbms sql-execution-plan

DBMS(在我的情况下是postgres)如何处理执行计划和准备好的声明。

查询的参数会对执行计划产生巨大影响,主要是由于数据统计。

在某些情况下,如果数据分布良好,则可能更喜欢使用索引但是对于特定值更喜欢顺序扫描,因为参数不具有判别性(通常在参数匹配表行的10%时)

我想知道准备好的陈述是否总是一种提高表现的好方法,或者它是否是一种最好的努力"

提前致谢

编辑:我担心的是经常运行相同的查询,但需要更改执行计划的其他参数。很难衡量准备好的陈述的绩效收益与总是拥有最准确的执行计划

1 个答案:

答案 0 :(得分:1)

准备好的语句是一种很好的方式,可以使相同的简单查询更快地运行。例如,像

这样的东西
insert into table values ($1,$2,$3);

OTOH这不是一个很好的方法,可以让大型丑陋的复杂报表查询运行得更快,数据集可能会根据where子句中的内容而改变。

准备好的查询的重点是一遍又一遍地节省一些昂贵的查询计划步骤。对于上面列出的简单插入,运行1,000次,计划成本会增加。

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