代码之家  ›  专栏  ›  技术社区  ›  Joe

PostgreSQL查询优化指南?

  •  19
  • Joe  · 技术社区  · 15 年前

    我已经找到了很多关于调优数据库服务器的参考资料,但是我没有找到太多关于调优单个查询的内容。

    例如,在Oracle中,我可能会尝试添加忽略索引或使用排序合并与相关联接的提示,但除了这些提示之外,我在调整Postgre方面找不到更多其他提示 using explicit joins 以及在需要时提出的建议 bulk loading tables .

    有没有这样的指南可以让我专注于优化运行最频繁和/或性能最差的查询,希望不会对当前性能良好的查询产生负面影响?

    我甚至很乐意找到一些东西来比较某些类型的查询相对于其他数据库的执行情况,这样我就有了更好的线索,知道应该避免哪些事情。

    使现代化

    我应该提到的是,我把所有的Oracle DBA类以及它们的数据建模和SQL调优类带回了8i时代。。。所以我知道“解释”,但这更多的是告诉你查询出了什么问题,而不一定是如何改进。(例如,“当var=1或var=2”和“当var在(1,2)中时”“在生成执行计划时也会考虑到这一点?如果我使用10个排列会怎样?何时使用多列索引?有没有办法让计划员优化最快的开始和最快的完成?当我从mySQL、Oracle或其他RDBMS迁移时,会遇到什么样的‘陷阱’?”

    更新2:

    我找到了一个 Comparison of different SQL Implementations Oracle / SQL Server / DB2 / Mckoi /MySQL Database Equivalents SQL Dialects Reference 它涵盖了人们的贡献(包括一些DB2、SQLite、mySQL、PostgreSQL、Firebird、Vituoso、Oracle、MS-SQL、Ingres和Linter)。

    6 回复  |  直到 15 年前
        1
  •  12
  •   user80168 user80168    15 年前

    至于表现不佳的查询,请解释、分析并阅读。

    您可以将解释分析输出放在站点上,如 explain.depesz.com -它将帮助您找到真正花费最多时间的元素。

        2
  •  7
  •   Marco Mariani    15 年前

    有一个很好的在线工具,可以获取 EXPLAIN ANALYZE

    http://explain.depesz.com/help

    顺便说一句,我认为发布的查询是公开的,“先前的解释”链接已经被垃圾邮件击中。

        3
  •  5
  •   synecdoche    15 年前

    http://www.postgresql.org/docs/current/static/indexes-examine.html

    您可以给出提示: SET enable_indexscan TO false; 将使PostgreSQL尝试不使用索引

        4
  •  5
  •   Will Hartung    15 年前

    为了说明您的观点,不幸的是,在Postgres中调优查询的唯一方法就是调优其基础数据库。在oracle中,您可以逐个查询设置所有这些选项,在过程中胜过优化器的计划,但在Postgres中,无论好坏,您几乎都要受优化器的摆布。

        5
  •  4
  •   monksy    15 年前

    PGAdmin3工具包括一个图形解释工具,用于分解查询的处理方式。它还特别有助于显示表扫描发生的位置。

        6
  •  3
  •   hgmnz    15 年前

    http://wiki.postgresql.org/wiki/Using_EXPLAIN ,但最新的PDF是2008年的,所以可能有更新的东西。我很想听听其他用户的答案。

    此外,contrib软件包中正在酝酿一些东西: http://www.sai.msu.su/~megera/wiki/plantuner