在這個SQL:MySQL查詢中LEFT慢得令人難以置信JOIN如果給定值0到主ID
SELECT s.*,
u.id,
u.name
FROM shops s
LEFT JOIN users u ON u.id = s.user_id
OR u.id = s.owner_user_id
WHERE s.status = 1
出於某種原因,這個查詢需要一個神奇的時代。儘管id是主鍵。它似乎特別是在我添加這部分OR u.id=s.owner_user_id
查詢變得緩慢。 owner_user_id
往往只有0幾次。但爲什麼顯然掃描整個桌子需要很長時間?數據庫表users
非常長。我沒有設計它。這對於後來的程序員添加了太多字段的客戶而言。桌子是22k行和幾十個領域。
*僅用於演示的字段名稱。實際名稱是不同的,所以不要問我爲什麼要找owner_user_id(;我通過刪除「OR ...」部分來解決緩慢問題,而是在循環中搜索id,如果它不是0。但我想知道爲什麼發生這種情況以及如何加速比該查詢原樣。
「數據庫表用戶非常長大」 - 22k行不大;它很小! – 2011-05-24 02:15:24
好吧,有幾十個未優化的領域。 – 2011-05-24 02:23:33
的邏輯是要沿着與商店相關的用戶信息獲取商店列表,商店可以有一個或另一個兩個用戶。 *我編輯了選擇部分。 – 2011-05-24 02:36:50