2009-10-08 46 views
19

我发现了一些讨论调整数据库服务器的资源,但我没有发现很多关于个别查询的调整。例如,在Oracle中,我可能会尝试添加提示来忽略索引或使用排序合并与关联连接,但我找不到很多有关using explicit joins以外的Postgres和bulk loading tables时的建议。PostgreSQL查询调整指南?

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

我甚至很高兴能找到一些比较某些类型的查询相对于其他数据库执行的事情,所以我更好地了解了要避免的事情。

更新

我已经提到过,我把所有的Oracle DBA班与他们的数据建模和SQL调优类一起回到8I天...所以我知道“解释” ,但这更多的是告诉你查询出了什么问题,而不一定如何使它更好。 (例如'while var = 1 or var = 2'和'while(1,2)'中的var在生成执行计划时认为是相同的?如果我以10个排列组合执行该操作?如果多列使用的索引是否有方法让计划者优化最快的开始与最快的结束?当从mySQL,Oracle或其他RDBMS移动时,我会遇到什么样的“陷阱”?)

我可以写任何复杂的查询如果不是数百种方法,我希望不必尝试所有的方法,并通过试验和错误找出哪一个最好。我已经发现'SELECT count(*)'不会使用索引,但是'SELECT count(primary_key)'会......也许是'PostgreSQL for SQL用户'的类文档,它解释了各种查询避免,以及如何最好地重新编写它们,或如何让规划人员更好地处理它们。

更新2:

我发现了一个Comparison of different SQL Implementations覆盖的PostgreSQL,DB2,MS-SQL,MySQL和甲骨文和Informix,并解释如果怎样,和对事物的陷阱,你可以尝试做的,他的参考部分链接到Oracle/SQL Server/DB2/Mckoi /MySQL Database Equivalents(这是它的标题所暗示的),以及涵盖人们贡献的任何人(包括一些DB2,SQLite,mySQL,PostgreSQL,Firebird,Vituoso,Oracle,MS-SQL,Ingres和Linter)的Wikibook SQL Dialects Reference。 。

+0

不太适合查询调优,但对于那些来自mysql的人来说,这可能很有用:http://www.wikivs.com/wiki/MySQL_vs_PostgreSQL – Joe 2010-02-11 14:26:31

+0

对于来自Oracle的人来说:http://www.cs.cmu .edu /〜pmerson/docs/OracleToPostgres.pdf;并在一般'陷阱'的postgres:http://sql-info.de/postgresql/postgres-gotchas.html – Joe 2011-11-18 18:59:21

+0

这可能是有用的postgres调整:http://tekadempiere.blogspot.ae/2014/09/ tuning-postgresql-for-better-performance.html – Sajeev 2017-01-13 11:05:52

回答

4

的PGAdmin3工具包括用于打破询问如何处理图形的解释工具。它还特别有助于显示发生表扫描的位置。

5

为了解决您的观点,不幸的是,在Postgres中调整查询的唯一方法就是调整数据库的底层。在oracle中,你可以在查询的基础上设置所有这些选项,胜过过程中的优化器计划,但是在Postgres中,你几乎处于优化器的控制之下,无论好坏。

11

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

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

6

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

http://explain.depesz.com/help

顺便说一句,我觉得贴查询成为大众,“以前的解释”链接遭到了垃圾邮件的攻击。