DBMS(在我的情况下是postgres)如何处理执行计划和准备好的声明。
查询的参数会对执行计划产生巨大影响,主要是由于数据统计。
在某些情况下,如果数据分布良好,则可能更喜欢使用索引但是对于特定值更喜欢顺序扫描,因为参数不具有判别性(通常在参数匹配表行的10%时)
我想知道准备好的陈述是否总是一种提高表现的好方法,或者它是否是一种最好的努力"
提前致谢
编辑:我担心的是经常运行相同的查询,但需要更改执行计划的其他参数。很难衡量准备好的陈述的绩效收益与总是拥有最准确的执行计划
答案 0 :(得分:1)
准备好的语句是一种很好的方式,可以使相同的简单查询更快地运行。例如,像
这样的东西insert into table values ($1,$2,$3);
OTOH这不是一个很好的方法,可以让大型丑陋的复杂报表查询运行得更快,数据集可能会根据where子句中的内容而改变。
准备好的查询的重点是一遍又一遍地节省一些昂贵的查询计划步骤。对于上面列出的简单插入,运行1,000次,计划成本会增加。
对于一个复杂的大型报告查询,OTOH的规划时间是无关紧要的。大多数大型报告查询等需要几秒到几分钟甚至几小时才能运行。计划时间(以毫秒为单位)在这里值得担心。