Schema:
CALL (ID,USER_ID(Foreign key),SP_USER_ID(Foreign key))
USER (ID,NAME)
查詢1:從表1(外鍵)到表2(主鍵)加入2列 - 如何避免JOIN BUFFER?
SELECT u.name,
v.name
FROM call c
INNER JOIN USER u
ON c.user_id = u.id
INNER JOIN USER v
ON c.sp_user_id = v.id
查詢2:
SELECT u.name
FROM call c
INNER JOIN USER u
ON c.user_id = u.id
查詢2工作正常,結果快點過來了。
但是,查詢1需要大量的時間,有時MySQL客戶端崩潰(看到解釋計劃,它顯示了一個USER表中的「JOIN BUFFER」)。
「where」SP_USER_ID或USER_ID的條件有些快速給出結果,但它不在可接受的範圍內。「其中」其他列上的條件沒有任何影響。
如何避免JOIN BUFFER在這種情況下獲得更快的結果並通過連接或其他方式獲得期望的結果?
你有三張桌子還是兩張桌子?你有另一張Super_User的桌子嗎? –
。只有2個表 - CALL和USER.USER表具有所有用戶信息.CALL中的USER_ID與客戶ID相同,而CALL中的SP_USER_ID與正在服務/參與該客戶的個人ID相同。現在,我需要與USER表聯合以獲取USER_ID和SP_USER_ID的名稱。 – user104309