2012-08-01 76 views
1

我正在做以下選擇查詢的解釋計劃,解釋計劃永遠不會返回。解釋計劃在2-3分鐘之前回來,但現在它永遠不會回來。以下是我正在運行的解釋查詢mysql解釋時間

explain SELECT * FROM 
((
SELECT DISTINCT hi.target_profile_id, hi.handset_id 
FROM handset_inclusions hi, 
campaigns c, 
campaigns_target_profiles ctp 
WHERE hi.target_profile_id = ctp.target_profile_id 
AND c.id=ctp.campaign_id 
AND c.active=1 
AND c.house_ad = true 
ORDER BY target_profile_id, handset_id) 
UNION DISTINCT 
(
SELECT DISTINCT hi.target_profile_id, hi.handset_id 
FROM handset_inclusions hi, 
campaigns c, 
campaign_flights f, 
campaigns_target_profiles ctp 
WHERE hi.target_profile_id = ctp.target_profile_id 
AND c.id=ctp.campaign_id 
AND c.active=1 
AND c.house_ad = false 
AND c.id = f.campaign_id 
AND (f.active_flight = true or c.id in (199,857,947) 
     OR (NOW() >= DATE_SUB(f.start_time, INTERVAL 6 HOUR) 
      AND NOW() <= DATE_ADD(f.end_time, INTERVAL 6 HOUR))) 
ORDER BY target_profile_id, handset_id) 
UNION DISTINCT 
(SELECT prof.target_profile_id, h.id as handset_id 
FROM (SELECT distinct (pc.target_profile_id) as target_profile_id 
     FROM placements p, sites s, publishers pubs, placement_3PNchannel pc 
     LEFT OUTER JOIN 3PNchannel c 
     ON c.id = pc.3PNchannel_id 
     WHERE p.id = pc.placement_id 
     AND p.siteid = s.id 
     AND pubs.id = s.publisherid 
     AND pc.active = TRUE 
     AND pubs.allows_3pn)prof, handsets h, handset_inclusions i 
WHERE prof.target_profile_id = i.target_profile_id 
    AND i.handset_id = h.id)) t 
    order by t.target_profile_id; 
+0

我的問題是有沒有辦法讓這個解釋運行更快?我正在使用select子查詢並使用不同的選擇將它們全部聯合起來。解釋計劃中的select子查詢總是非常緩慢嗎?同樣的查詢跑了2-3分鐘,但爲什麼現在這麼長時間? – user130561 2012-08-01 21:29:34

+1

嘗試「解釋」每個子查詢分別尋找瓶頸 – alfasin 2012-08-01 21:30:25

+0

爲什麼我們不能看到解釋?:) – Samson 2012-08-01 21:50:11

回答

0

這是一個bug。 MySQL似乎在運行EXPLAIN時執行了子查詢。

它似乎應該修復在MySQL> = 5.6