Hello! 欢迎来到小浪云数据!

MySQL 关联查询:直接使用 JOIN 还是分步查询更合适?


MySQL 关联查询:直接使用 JOIN 还是分步查询更合适?

mysql 关联查询:直接使用 join 还是分步查询?

当涉及到关联查询时,mysql 提供了两种主要方法:直接使用 join 或分步查询。

直接使用 join

这种方法通常更有效,因为它只需执行一次查询。join 操作会自动连接满足连接条件的记录。它特别适用于需要返回来自多个表的多个列的情况。

分步查询

这种方法涉及两次或更多次查询。首先,选择要连接的表的列。然后,在后续查询中使用这些列作为 where 子句中的条件。分步查询通常用于需要对数据执行更复杂操作的情况。

效率

直接使用 join 通常更有效,因为它避免了多次查询开销。然而,当需要对数据执行复杂操作时,分步查询可以提供更大的灵活性。

执行顺序

对于使用 join 的查询,mysql 通常遵循以下执行顺序:

  1. 评估 where 子句(如果有的话)。
  2. 执行连接操作。
  3. 从连接结果中选择所需的列。

空表执行计划

在空表上运行执行计划显示:

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | extra | | --- | ----------- | ----- | ---------- | ---- | ------------- | --- | ------- | --- | ---- | -------- | ----- | | 1 | SIMPLE | auth_user | NULL | ALL | NULL | NULL | NULL | NULL | 0 | 100.00 | Using where | | 1 | SIMPLE | friendships_friendship | NULL | ref | PRIMARY,friendships_friendship_to_user_id_986baf39_fk_auth_user_id | friendships_friendship_to_user_id_986baf39_fk_auth_user_id | 5 | const | 0 | 100.00 | Using where; JoinUsingDistinctGroups |
登录后复制

该计划显示:

  • 首先,它执行 auth_user 表上的 where 子句(to_user_id = 1)。
  • 然后,它使用 friendships_friendship_to_user_id_fk 键在 friendships_friendship 表上执行连接。

相关阅读