我正在写一篇关于不同DBMS中查询优化的论文,我试图找出它们之间的核心差异。
两者使用CBO,基于成本的优化方式相同,解析查询->生成计划->挑选最好的一个给定的数据库统计数据。
我仍在研究这两个引擎的信息,但如果有人知道它们的不同之处(或不同),将不胜感激。
发布于 2018-05-25 01:34:56
根本不是一个全面的答案,但想给你我的见解。简而言之,Oracle有一个更加完善的SQL优化器。
首先,甲骨文有更多的算法可供选择。这意味着,有时甲骨文会区分细微的差异,并提供三种算法;MySQL (在相同的情况下)只有一种可供选择。因此,Oracle为特定情况提供了更好的选择。
另一个区别是MySQL的执行计划可读性不是很好。我并不是说它们在内部不好,只是explain extended
没有告诉你太多细节。Oracle在access和filter谓词之间有一个非常明显的区别,而在MySQL中,您并不真正知道发生了什么。
Oracle有许多适合在多个服务器上并行处理的算法,而MySQL仅限于同一台机器上的多线程。对于高度并行的查询来说,这比多服务器带来的好处更重要。
Oracle仍然有一个RBO (基于规则的优化器),但在某些情况下可能会很有用。无论如何,MySQL建议不要使用它,但是如果你需要它,它仍然在那里。
甲骨文以注释的形式向优化器提供了无数的“提示”(据我所知是/* ... */
?)在这里您可以调整执行计划以满足您的需要。MySQL对此有较少的“条款”。
https://stackoverflow.com/questions/50438575
复制相似问题