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」 我们就该擦亮双眼、像打了鸡血一样、保持时刻优化的姿态
此刻的优化就容易多了、尽可能保证排序字段在驱动表中
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn