mysql性能优化之小表驱动大表

在 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值