MySQL 只支持 Nested Loop Join、关于这个Nested JOIN的详细用法请参阅偶之前blog:点击打开链接
和Oracle对比下、不然得知、Straight_JOIN相当于Oracle里面的:USE_NL、所以、原理和适用上大概都是相同的、
不过、对于驱动表的选择、MySQL 优化器可能没有Oracle那般智能、MySQL采用简单粗暴的方法:
哪个表的结果集小,就以哪个表为驱动表
偶赶脚有2 种原因可令你选择 Straight_JOIN ① MySQL 优化器不给力、错误选择驱动表 ② Nested Loop Join 的适用场景: ==>一般用在连接的表中有索引,并且索引选择性较好(也就是Selectivity接近1)的时候 ==>也就是驱动表的记录集比较小( 一般的优化操作: ① show full processlist; ② explain + TOP-SQL ; 注意:在EXPLAIN结果中,第一行出现的表就是驱动表 一个经典优化例子: 当explian输出结果中含:「Using filesort」,甚至「Using temporary」 我们就该擦亮双眼、像打了鸡血一样、保持时刻优化的姿态
此刻的优化就容易多了、尽可能保证排序字段在驱动表中
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn