当您寻找Oracle的特定信息时,我会推荐Oracle上的Ask Tom博客。一般来说,我认为您会发现建议是不要调整查询。您将获得有关如何编写优化程序可以优化的查询的良好建议。Oracle文档也是在线的,我通常会在那里查找有关Oracle的最新信息。我还没有使用SQLServer,所以没有任何建议。
在过去的几年中,我在优化查询领域没有看到很多新东西。最大的变化是基于规则的优化器的弃用,我几乎不记得使用它。但是,我了解SQLServer仍然使用基于规则的优化器,因此了解其规则可以有所帮助。
您可以在其中编辑,执行查询以及生成解释计划的工具有助于理解哪些更改使您的查询性能良好。我使用AquaData Studio取得了不错的效果,并且非常喜欢它的树状视图。SQL Developer也应该这样做。
与任何优化一样,您需要获得有关其性能的定量数据。然后,您可以确定是否确实对其进行了优化。
如何优化查询部分取决于解析器如何构建和优化查询。在很大程度上,它取决于您要查询的数据的分布。在Oracle数据库中,如果结果集占表的百分之四或更多,并且是随机分布的,则表扫描通常比索引快。
我曾为一组开发人员优化查询。一年仅需要进行两次或三个查询即可进行认真的优化。大多数查询非常简单,因此不需要优化。其余的通常可以通过添加缺少的联接路径来处理。
对于Oracle,有三个可调整的设置,它们会显着影响性能。索引和数据查找的成本核算会相互作用,以更改将使用或不使用索引的条件。这两个可以在每个会话的基础上进行调整。默认值通常不是最佳的。另一个值控制优化器尝试多少个替代方案。增大此值通常会有所帮助。
数据分布和数量极大地影响了优化。优化时,最好使用生产数据库的副本,或者至少使用具有相同数据分布和卷的数据库。我严重破坏了测试环境,优化了生产订单数据库的查询。测试和开发数据库的数据分布有很大的不同,即使数据少得多,也导致查询失败。