DBMS (在我的例子中是postgres)是如何处理执行计划和准备语句的。
查询的参数可能会对执行计划产生巨大影响,主要是由于数据统计。
在某些情况下,如果数据分布良好,它可能更喜欢使用索引,但对于特定的值,则选择顺序扫描,因为参数不具有判别性(通常当参数匹配表行的10%以上时)。
我想知道准备好的陈述是否总是提高表现的好方法,还是更多的是一种“最大的努力”?
提前感谢
编辑:我关心的是频繁地运行相同的查询,但是使用可能需要更改执行计划的其他参数。要衡量准备好的报表的性能增益是相当困难的,因为总是有最精确的执行计划。
发布于 2017-09-12 17:48:35
准备好的语句是一种很好的方法,可以使相同的简单查询一遍又一遍地运行。例如,类似于
insert into table values ($1,$2,$3);OTOH --这不是一种让大型复杂报表查询运行得更快的好方法,在那里,数据集可能会根据where子句中的内容进行更改。
准备查询的全部目的是节省一遍又一遍地进行查询规划的昂贵步骤。对于上面列出的简单插入,运行1000次,规划成本加起来。
OTOH对于一个大型复杂的报告查询来说,规划时间是不重要的。大多数大型报告查询等都需要几秒钟到几分钟甚至几个小时的时间才能运行。计划时间(以毫秒为单位)在这里不值得担心。
https://stackoverflow.com/questions/46182549
复制相似问题