我找到许多关于调整数据库服务器的资源,但对于调整单个查询并没有很多内容。
例如,在Oracle中,我可以尝试添加提示忽略索引或使用排序合并而不是相关联的连接,但我找不到在Postgres上进行调整的很多内容,除了使用显式连接和在批量加载表时进行推荐。
是否存在这样的指南,以便我可以专注于调整最常用和/或性能不佳的查询,希望不会对当前表现良好的查询产生不利影响?
我甚至会很高兴找到一些相对于其他数据库执行情况的比较,以便我更好地了解要避免什么样的事情。
更新:
我应该提到,我在8i时代参加了所有Oracle DBA课程以及它们的数据建模和SQL调整课程……因此我知道“EXPLAIN”,但这更多地是告诉你查询出了什么问题,而不是如何使其更好。 (例如,当生成执行计划时,“while var = 1 or var = 2”和“while var in(1,2)”是否被认为是相同的?如果我用10个排列方式怎么办?何时使用多列索引?有什么方法可以让计划程序优化最快的启动还是最快的完成?从MySQL、Oracle或其他RDBMS移动时可能会遇到什么问题?)
我可以用几十甚至上百种方式编写任何复杂的查询,并且我希望不必通过试错来尝试它们中的每一个并找出哪一个效果最好。我已经发现“SELECT count(*)”不会使用索引,但“SELECT count(primary_key)”会……也许有一种“面向经验SQL用户的PostgreSQL”文档,可以解释要避免的查询类型以及如何最佳地重新编写它们,或者如何让计划程序更好地处理它们。
更新2:
我发现了一篇SQL实现的比较文章,其中包括了PostgreSQL、DB2、MS-SQL、MySQL、Oracle和Informix,并解释了在尝试进行某些操作时可能遇到的问题和各种情况,他的参考文献部分链接到了Oracle/SQL Server/DB2/Mckoi/MySQL数据库的等效性(其标题就是这个意思),以及维基教科书中的SQL方言参考手册,该手册涵盖了人们贡献的各种内容(包括一些DB2、SQLite、MySQL、PostgreSQL、火鸟、Vituoso、Oracle、MS-SQL、Ingres和Linter)。