来自生产环境的朋友可能会遇到:
一段时间后,运行良好的查询语句可能会突然变得非常糟糕。
一个可能的原因是数据分布发生了变化。
导致MySQL优化器对驱动表的选择发生了变化,然后索引失效。
所以,闲着喝咖啡的时候,要多收集两张表的统计信息。
这时,直_JOIN出现了。
MySQL只支持嵌套循环连接。关于这个嵌套连接的详细用法,请参考我以前的博客:点击打开链接。
http://www.bitsCN.com/database/201301/186885.html
与Oracle相比,Straight_JOIN相当于Oracle中的USE_NL,所以原理和应用大概是一样的。
但是MySQL优化器在驱动表的选择上可能没有Oracle聪明,MySQL采用了一种简单粗暴的方法:
哪个表的结果集小,就是驱动表。
选择Straight_JOIN有两个原因。
① MySQL优化器不强大,驱动表选择错误。
②嵌套循环连接的适用场景:
= = >一般在连接表中有索引且索引选择性好(即选择性接近1)的情况下使用。
==>也就是驱动表的记录集比较小(