我已经找到了一些关于调优数据库服务器的资源,但是我还没有找到关于各个查询的调优的内容。
例如,在Oracle中,我可能尝试添加一些提示来忽略索引,或者使用排序-合并和关联联接,但是在优化Postgres时,除了使用显式联接和散装装货表的建议之外,我找不到更多的线索。
是否存在这样的指南,以便我可以集中精力调优运行最好的和/或性能不佳的查询,希望不会对当前性能良好的查询产生不利影响?
我甚至很乐意找到一些东西来比较某些类型的查询相对于其他数据库是如何执行的,所以我有了更好的线索来避免什么类型的查询。
更新:
我应该提到,我把所有的Oracle DBA类以及它们的数据建模和SQL调优类都带回了8i时代.所以,我知道“解释”,但这更多的是告诉您查询的问题所在,而不一定要让它变得更好。(例如,在生成执行计划时,“when var=1或var=2”和“when var in (1,2)”被认为是相同的吗?如果我用10个排列来做呢?何时使用多列索引?有没有办法让规划师为最快的开始和最快的完成进行优化?当我从mySQL、甲骨文或其他关系数据库系统迁移时,我会遇到什么样的“困境”?)
我可以编写任何复杂的查询几十个,如果不是数百种方式,我希望不需要尝试所有,并找到一个最好的工作通过试验和错误。我已经发现'SELECT计数(*)‘不会使用索引,但是'SELECT计数(Primary_key)’将.也许是一个“有经验的SQL用户的PostgreSQL”文档,它解释了要避免的各种查询,以及如何最好地重写这些查询,或者如何让规划者更好地处理这些查询。
更新2:
我找到了一个不同SQL实现的比较,它涵盖了PostgreSQL、DB2、MS-SQL、mySQL、Oracle和Informix,并解释了您可能尝试做的事情是否、如何和理解,以及他的参考部分链接到Oracle / Server / DB2 / Mckoi /MySQL数据库等价物 (这是它的标题所暗示的)和wikibook SQL方言引用,后者涵盖了人们的任何贡献(包括一些DB2、SQLite、mySQL、PostgreSQL、Firebird、Vituoso、Oracle、MS-SQL、Ingres和Linter)。
发布于 2009-10-08 23:05:43
http://www.postgresql.org/docs/current/static/indexes-examine.html
您可以给出提示:SET enable_indexscan TO false;将使PostgreSQL尝试不使用索引。
发布于 2009-10-09 10:42:30
至于表现不佳的查询,请进行解释、分析和阅读。
您可以将解释分析输出放在像explain.depesz.com这样的站点上--它将帮助您找到真正花费时间最多的元素。
发布于 2010-03-16 14:04:07
有一个很好的在线工具,它接受EXPLAIN ANALYZE的输出,并以图形方式显示关键部件(例如,错误的估计、热点等)。
http://explain.depesz.com/help
顺便说一句,我认为发布的查询变得公开了,而“先前的解释”链接已经被垃圾邮件击中了。
https://stackoverflow.com/questions/1540877
复制相似问题