月牙旁,你轻颦浅笑

向往的生活也许只是一种波普

O ever youthful, O ever weeping.


驱动表和被驱动表

当两表发生关联的时候就会有驱动表和被驱动表之分,驱动表也叫外表(R表),被驱动表也叫做内表(S表)。一般我们将小表当做驱动表(指定了联接条件时,满足查询条件的记录行数少的表为「驱动表」,未指定联接条件时,行数少的表为「驱动表」;MySQL 内部优化器也是这么做的)。以下有两点需要注意:

两表关联

  • 当两表通过索引建立关联时,驱动表不需要建立索引,被驱动表有索引即可,这样就能利用上索引了;不过为了避免发生弄错的情况,两个表都建立索引也可以。

排序

  • 对驱动表可以直接排序,对非驱动表(的字段排序)需要对循环查询的合并结果(临时表)进行排序,所以 EXPLAIN 中会出现 using temporary 的情况,效率降低。所以我们尽量保证排序用的是驱动表字段。