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

浅述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语句进行测试和性能优化,以确定最佳的表顺序。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值