在 SQL 优化中,“小表驱动大表”是一种常见的优化原则。

           它指的是在进行表连接(JOIN)操作时,优先使用较小的表作为驱动表(也称为外层表)去连接较大的表(也称为被驱动表或内层表)。

       这样做的原因是,对于连接操作,通常需要对驱动表进行全表扫描或根据索引进行查找,然后根据连接条件与被驱动表进行匹配。

         如果先对小表进行操作,那么总的扫描行数和匹配次数会相对较少,从而提高查询的效率。 例如,假设有表 A(小表)和表 B(大表)进行连接,如果以表 A 作为驱动表,那么遍历表 A 的成本相对较低,然后根据连接条件与表 B 进行匹配,效率会更高。

      在数据库中,通常根据表中的数据量来区分小表和大表。如果一个表包含的数据行数相对较少,通常被认为是小表;而数据行数较多的表则被称为大表。

JOIN(连接)是用于在 SQL 中根据某些条件将两个或多个表中的行组合在一起的操作。常见的 JOIN 类型包括 INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)和 FULL JOIN(全连接)。

以下是一个小表驱动大表的示例 SQL 语句,假设 small_table 是小表,big_table 是大表,它们通过 id 列进行关联:

SELECT *
FROM small_table s
JOIN big_table b ON s.id = b.id;

在这个例子中,先对 small_table 进行处理,然后再与 big_table 进行连接操作,以提高查询效率。但实际应用中,是否能达到优化效果还需考虑表的结构、数据分布、索引等因素。 

 需要注意的是,在实际应用中,选择哪个表作为驱动表还需要综合考虑表的结构、索引情况以及具体的查询条件等因素。

最后回忆一下这几个连接

INNER JOIN(内连接):返回两个表中满足连接条件的行的交集。只有在两个表中都存在匹配的行时,才会返回这些行。

   SELECT * 
   FROM table1 
   INNER JOIN table2 ON table1.column = table2.column;

LEFT JOIN(左连接):返回左表(即写在 JOIN 关键字左边的表)中的所有行,以及右表中与左表匹配的行。如果右表中没有与左表匹配的行,则相应的右表列值为 NULL。

   SELECT * 
   FROM table1 
   LEFT JOIN table2 ON table1.column = table2.column;

RIGHT JOIN(右连接):与左连接相反,返回右表中的所有行,以及左表中与右表匹配的行。如果左表中没有与右表匹配的行,则相应的左表列值为 NULL。

1

   SELECT * 
   FROM table1 
   RIGHT JOIN table2 ON table1.column = table2.column;

FULL JOIN(全连接):返回左表和右表中的所有行。如果某一行在另一个表中没有匹配项,则对应的列值为 NULL。

   SELECT * 
   FROM table1 
   FULL JOIN table2 ON table1.column = table2.column;

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐