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í)行順序:
- 評估 where 子句(如果有的話)。
- 執(zhí)行連接操作。
- 從連接結(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)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END