mysql 關聯查詢:直接使用 join 還是分步查詢?
當涉及到關聯查詢時,mysql 提供了兩種主要方法:直接使用 join 或分步查詢。
直接使用 join
這種方法通常更有效,因為它只需執行一次查詢。join 操作會自動連接滿足連接條件的記錄。它特別適用于需要返回來自多個表的多個列的情況。
分步查詢
這種方法涉及兩次或更多次查詢。首先,選擇要連接的表的列。然后,在后續查詢中使用這些列作為 where 子句中的條件。分步查詢通常用于需要對數據執行更復雜操作的情況。
效率
直接使用 join 通常更有效,因為它避免了多次查詢開銷。然而,當需要對數據執行復雜操作時,分步查詢可以提供更大的靈活性。
執行順序
對于使用 join 的查詢,mysql 通常遵循以下執行順序:
- 評估 where 子句(如果有的話)。
- 執行連接操作。
- 從連接結果中選擇所需的列。
空表執行計劃
在空表上運行執行計劃顯示:
| 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 表上執行連接。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END