浅述Oracle和Mysql两种库分别在join时大表的归宿

您所在的位置:网站首页 十一堵车的句子 浅述Oracle和Mysql两种库分别在join时大表的归宿

浅述Oracle和Mysql两种库分别在join时大表的归宿

2023-05-18 08:46| 来源: 网络整理| 查看: 265

浅述Oracle和Mysql两种库分别在join时大表的归宿

突然想起这么一个问题,Oracle 和 Mysql 在各自关联大表的时候,要想性能高点,大表放的位置是不是一样的,针对这个问题,我查找了一些资料,并确定的该问题的结果。

在Oracle和MySQL中,对于JOIN语句,将大表放在JOIN语句的左侧或右侧都可以,但是 由于查询优化器的不同实现,有时候会对查询性能造成影响。

1.在Oracle中,查询优化器的实现方式会根据STATISTICS_LEVEL的设置以及所用的具体版本进行不同的选择。在默认情况下,Oracle的查询优化器会优先使用COST-based优化器,进行基于逻辑读取次数和CPU资源消耗等因素的计算,然后再根据成本来选择执行计划。

因此,在Oracle中,如果LEFT JOIN或INNER JOIN语句中有一张表比其他表的数据量大很多,一些优化器会建议将它放在JOIN操作的末端。 但是,如果该大表包含了WHERE语句的查询条件,那么将该表放在JOIN操作的末端也未必是最优的,因为在WHERE语句执行时,需要先扫描该表来获取符合条件的行集合,然后再参与后面的JOIN操作。在这种情况下,将大表放在JOIN操作的开头可能更高效。

2.在MySQL中,查询优化器会针对每个JOIN操作进行优化,生成对应的执行计划。通常情况下,将大表放在JOIN语句的末尾更好,因为MySQL的查询优化器会优先使用基于索引的优化器,而对于大表,索引可能不太有效。因此,将大表放在JOIN语句的末尾,会使MySQL可以先执行小表上的JOIN操作,减少JOIN的数据量,达到更高的效率。

总的来说,无论是Oracle还是MySQL,建议根据实际情况,对SQL语句进行测试和性能优化,以确定最佳的表顺序。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3