MySQL 關(guān)聯(lián)查詢:直接使用 JOIN 還是分步查詢更合適?

MySQL 關(guān)聯(lián)查詢:直接使用 JOIN 還是分步查詢更合適?

mysql 關(guān)聯(lián)查詢:直接使用 join 還是分步查詢?

當(dāng)涉及到關(guān)聯(lián)查詢時,mysql 提供了兩種主要方法:直接使用 join 或分步查詢。

直接使用 join

這種方法通常更有效,因為它只需執(zhí)行一次查詢。join 操作會自動連接滿足連接條件的記錄。它特別適用于需要返回來自多個表的多個列的情況。

分步查詢

這種方法涉及兩次或更多次查詢。首先,選擇要連接的表的列。然后,在后續(xù)查詢中使用這些列作為 where 子句中的條件。分步查詢通常用于需要對數(shù)據(jù)執(zhí)行更復(fù)雜操作的情況。

效率

直接使用 join 通常更有效,因為它避免了多次查詢開銷。然而,當(dāng)需要對數(shù)據(jù)執(zhí)行復(fù)雜操作時,分步查詢可以提供更大的靈活性。

執(zhí)行順序

對于使用 join 的查詢,mysql 通常遵循以下執(zhí)行順序:

  1. 評估 where 子句(如果有的話)。
  2. 執(zhí)行連接操作。
  3. 從連接結(jié)果中選擇所需的列。

空表執(zhí)行計劃

在空表上運行執(zhí)行計劃顯示:

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

該計劃顯示:

  • 首先,它執(zhí)行 auth_user 表上的 where 子句(to_user_id = 1)。
  • 然后,它使用 friendships_friendship_to_user_id_fk 鍵在 friendships_friendship 表上執(zhí)行連接。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊12 分享