MySQL杂谈

* * Nested Loop Join 实际上就是通过驱动表 的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表中查询数 据,然后合并结果 如果还有第三个参与Join,则再通过前两个表的Join 结果集作为循环基础数据, 再一次通过循环查询条件到第三个表中查询数据,如此往复。 * 当在某些特殊的环境中,我们的Join 必须是All,Index,range 或者是index_merge 类型的 时候,Join Buffer 就会派上用场了。在这种情况下,Join Buffer 的大小将对整个Join 语句的消 耗起到非常关键的作用。 * * 这里我们看到了,MySQL 在取得第一个表的数据之后,先根据排序条件将数据进行了一次 filesort,也就是排序操作。然后再利用排序后的结果集作为驱动结果集来通过Nested Loop Join 访 问第二个表。当然,大家不要误解,这个filesort 并不是说通过磁盘文件进行排序,仅仅只是告诉我 们进行了一个排序操作。 上 * 这时候的执行计划中出现了“Using temporary”,正是因为我们的排序操作需要在两个表Join 之 后才能进行,下图展示了这个Query 的执行过程: * 这时候的执行计划中出现了“Using temporary”,正是因为我们的排序操作需要在两个表Join 之 后才能进

文档评论(0)

1亿VIP精品文档

相关文档