【问题标题】:How to get the execution plan of a prepared statement work?如何获得准备好的语句的执行计划?
【发布时间】:2017-09-12 17:42:23
【问题描述】:

DBMS(在我的例子中是 postgres)如何处理执行计划和准备好的语句。

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

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

我想知道准备好的语句是否总是提高性能的好方法,还是更像是一种“尽力而为”

提前致谢

编辑:我担心经常运行相同的查询,但使用可能需要改变执行计划的其他参数。很难衡量准备好的语句与始终拥有最准确的执行计划的性能增益

【问题讨论】:

    标签: postgresql rdbms sql-execution-plan


    【解决方案1】:

    准备好的语句是让相同的简单查询更快地反复运行的好方法。例如,像

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

    OTOH 这不是让大而难看的复杂报告查询运行得更快的好方法,其中数据集可能会根据 where 子句中的内容而改变。

    准备好的查询的全部意义在于节省一遍又一遍地进行查询计划的代价高昂的步骤。对于上面列出的简单插入,运行 1000 次,计划成本加起来。

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

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2012-02-16
      • 2010-11-06
      相关资源
      最近更新 更多