了解下STRAIGHT_JOIN
程序员文章站
2022-04-27 13:17:49
...
测试表USER_INFO结构和数据如下:
测试表USER_ROLE结构和数据如下:
看下使用INNER JOIN的相关执行计划:
EXPLAIN SELECT * FROM USER_INFO t1 INNER JOIN USER_ROLE t2 ON t1.USER_NAME=t2.USER_NAME
可以发现这条sql语句的驱动表是t2,因为mysql默认会选择数据量更少的表做驱动表,以小表驱动大表。
使用STRAIGHT_JOIN的执行计划:
发现这时候t1是驱动表了,这是因为STRAIGHT_JOIN可以强行指定左表为驱动表。
总结
STRAIGHT_JOIN效果和INNER JOIN类似,只是可以人为的指定驱动表,建议真正觉得需要了再用,因为一般情况下,mysql优化器都能做出正确的选择。