浅述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的数据量,达到更高的效率。文章来源:https://www.toymoban.com/news/detail-444567.html
总的来说,无论是Oracle还是MySQL,建议根据实际情况,对SQL语句进行测试和性能优化,以确定最佳的表顺序。文章来源地址https://www.toymoban.com/news/detail-444567.html
到了这里,关于浅述Oracle和Mysql两种库分别在join时大表的归宿的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!