mysql性能优化之小表驱动大表
例如,假设有表 A(小表)和表 B(大表)进行连接,如果以表 A 作为驱动表,那么遍历表 A 的成本相对较低,然后根据连接条件与表 B 进行匹配,效率会更高。它指的是在进行表连接(JOIN)操作时,优先使用较小的表作为驱动表(也称为外层表)去连接较大的表(也称为被驱动表或内层表)。:返回左表(即写在 JOIN 关键字左边的表)中的所有行,以及右表中与左表匹配的行。这样做的原因是,对于连接操作,通常
在 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;
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)