我有一個表(call_history)與一個電話呼叫報告列表,caller_id是調用者,start_date(DATETIME)是調用日期。我需要做一份報告,顯示每天有多少人第一次打電話。例如:慢SQL查詢,如何提高查詢速度?
2013-01-01 - 100
2013-01-02 - 80
2013-01-03 - 90
我有這個查詢,它完美,但它非常緩慢。 start_date和caller_id列上都有索引;有沒有另外一種方法來獲取這些信息來加速這個過程?
下面是該查詢:
SELECT SUBSTR(c1.start_date,1,10), COUNT(DISTINCT caller_id)
FROM call_history c1
WHERE NOT EXISTS
(SELECT id
FROM call_history c2
WHERE SUBSTR(c2.start_date,1,10) < SUBSTR(c1.start_date,1,10)
AND c2.caller_id=c1.caller_id)
GROUP BY SUBSTR(start_date,1,10)
ORDER BY SUBSTR(start_date,1,10) desc
將「ORDER BY SUBSTR(start_date,1,10)」更改爲「ORDER BY start_date DESC」,使其運行速度提高2倍,其他所有操作變得更慢, – Toto
第二個查詢建議實際上需要的時間比原來的一個 – Toto
好的。什麼是運行這個輸出:EXPLAIN SELECT DATE(c1.start_date),COUNT(DISTINCT caller_id) FROM call_history C1 WHERE NOT EXISTS (SELECT ID FROM call_history C2 WHERE c2.start_date