以下查詢有效,但對於10條記錄(2秒)非常緩慢。分析表明它創建了一個tmp表,但我不知道爲什麼。MySQL - 如何優化此查詢?
基本上,我加入當前用戶,加入acl團隊,獲得他們所在的所有團體,然後將團隊加入公司,獲得他們所在的所有公司,然後加入公司以接受訂單,讓所有的訂單..
如果我刪除此行
ORDER BY orders.created_on DESC
那麼查詢在0.06秒執行(更然後可以接受的)..
幫助,就如何優化的任何想法?非常感謝:)
SELECT
orders.uuid,
companies.name as company_name
FROM
users u
JOIN
users_acl_groups g on u.uuid = g.user_uuid
JOIN
users_acl acl on (acl.user_uuid = u.uuid or acl.group_uuid = g.group_uuid)
JOIN
companies on acl.item_uuid = companies.uuid
JOIN
orders on companies.uuid = orders.company_uuid
WHERE
u.uuid = 'DDEC8073-5056-C000-01ED583A51CBCA32' and orders.status <> ''
ORDER BY orders.created_on DESC
limit 0, 10;
UPDATE時,查詢的解釋..
1簡單的命令ALL 9403使用 臨時的;使用filesort
1 SIMPLE acl ALL 1859使用where; 使用加入緩衝區
1 SIMPLE g ALL 2005 Using where; 使用連接緩衝
1家SIMPLE公司eq_ref PRIMARY PRIMARY 52 table.orders.company_uuid 1
1個簡單U ALL 33595使用其中; 不同的;使用連接緩衝
修改了您的標題,因爲猜測當您的問題的措辭很好時,由於它的命令性和要求苛刻的語氣會導致成本降低。 – 2010-06-28 05:18:35
嘗試使用相同查詢並將聯接應用於UID以外的任何列。嘗試使用int,float,string,UID並注意時間。讓我們也知道,如果你發現任何變化。 – 2010-06-28 12:36:56
你有關於orders.created_on的索引嗎?在查詢中顯示'EXPLAIN'上的輸出。也許你可以從其他指標中受益。哪個'EXPLAIN'會告訴我們。 – nos 2010-06-28 13:04:56