本文主要是介绍MySQL-straight_join,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参照文章:夏雪冬日 https://www.cnblogs.com/heyonggang/p/9462242.html
首先MySQL优化器要确定以谁为驱动表,也就是说以哪个表为基准,在处理此类问题时,MySQL优化器采用了简单粗暴的解决方法:哪个表的结果集小,就以哪个表为驱动表。
实际上在某些特殊情况里,排序字段可以不在驱动表里,比如驱动表结果集只有一行记录,并且在连接其它表时,索引除了连接字段,还包含了排序字段,此时连接表后,索引中的数据本身自然就是排好序的。
排序字段不在驱动表中,将可能导致查询时使用到filesort或者temporary,可以用explain分析到。
因此,将inner join字句改为straight_join有助于改善这种情况,强制性的指要求优化器执行我们指定的顺序,不让寻找记录少的表作为驱动表。
提醒:
- STRAIGHT_JOIN只适用于inner join,并不使用与left join,right join。(因为left join,right join已经代表指定了表的执行顺序)
- 尽可能让优化器去判断,因为大部分情况下mysql优化器是比人要聪明的。使用STRAIGHT_JOIN一定要慎重。
这篇关于MySQL-straight_join的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!