PostgreSQL查询调优指南?

时间:2009-10-08 22:30:52

标签: sql postgresql performance

我发现了许多关于调优数据库服务器的资源,但我对调整各个查询的工作并不多。

例如,在Oracle中,我可能会尝试添加提示来忽略索引或使用排序合并与相关联接,但我在using explicit joins之外调整Postgres以及bulk loading tables时的建议时找不到多少3}}

是否存在任何此类指南,以便我可以专注于调整运行最多和/或表现不佳的查询,希望不会对当前效果良好的查询产生负面影响?

我甚至很乐意找到一些东西来比较某些类型的查询相对于其他数据库的执行情况,因此我更好地了解了要避免的事情。

更新

我应该提到,我在8天内把所有的Oracle DBA课程以及他们的数据建模和SQL调优课程都拿回来......所以我知道'EXPLAIN',但更多的是告诉你这是怎么回事查询错误,不一定如何使其更好。 (例如,'var = 1或var = 2'和'var in(1,2)'在生成执行计划时被认为是相同的?如果我用10个排列做什么怎么办?什么时候是多列?使用的索引?有没有办法让规划人员优化以获得最快的启动速度和最快的速度?从mySQL,Oracle或其他一些RDBMS迁移时,我可能遇到什么样的“问题”?)

我可以编写任何复杂的查询数十个,如果不是数百种方式,我希望不必尝试所有这些,并通过反复试验找出最适合的查询。我已经发现'SELECT count(*)'不会使用索引,但'SELECT count(primary_key)'将...可能是'有经验的SQL用户的PostgreSQL'那种解释了各种查询的文档避免,以及如何最好地重新编写它们,或者如何让规划人员更好地处理它们。

更新2:

我找到了一个Comparison of different SQL Implementations,其中包括PostgreSQL,DB2,MS-SQL,mySQL,Oracle和Informix,并解释了您可能尝试做的事情,方法和问题,以及他的参考文章链接到{ {3}}(这是它的标题所暗示的)和wikibook Oracle / SQL Server / DB2 / Mckoi /MySQL Database Equivalents,涵盖了人们贡献的东西(包括一些DB2,SQLite,mySQL,PostgreSQL,Firebird,Vituoso,Oracle,MS-SQL,Ingres和棉绒)。

6 个答案:

答案 0 :(得分:12)

至于执行不佳的查询 - 请解释分析并阅读它。

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

答案 1 :(得分:7)

有一个很好的在线工具可以获取EXPLAIN ANALYZE的输出,并以图形方式显示关键部分(例如错误的估算,热点等)

http://explain.depesz.com/help

顺便说一下,我认为已发布的查询已公开,并且“之前解释”链接已被垃圾邮件发送。

答案 2 :(得分:5)

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

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

答案 3 :(得分:5)

为了解决您的观点,遗憾的是,在Postgres中调优查询的唯一方法就是调整其下的数据库。在oracle中,你可以逐个查询地设置所有这些选项,在过程中胜过优化器计划,但是在Postgres中,你完全受优化器的支配,无论好坏。

答案 4 :(得分:4)

PGAdmin3工具包含一个图形说明工具,用于分解查询的处理方式。它对于显示表扫描的位置也特别有用。

答案 5 :(得分:3)

我见过的最好的是http://wiki.postgresql.org/wiki/Using_EXPLAIN,但最新的PDF文件是从2008年开始的,因此可能会有更新的内容。我很想听听其他用户的回答。

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