2016-10-28 21 views
-1

我有,我是無法理解的問題.. 我有兩個疑問(該數據庫爲MySQL,只有一個表的所有CDR數據):Asterisk的CDR MySQL查詢的性能問題

SELECT * FROM cdr WHERE userfield LIKE 'audio:%' 
    AND (calldate >= '2016-10-26 00:00:00' 
    AND calldate <= '2016-10-26 23:59:59') 
    AND duration > 8 
ORDER BY uniqueid DESC LIMIT 200 OFFSET 0; 

它運行在0.05秒和另一個問題:

SELECT * FROM cdr WHERE userfield LIKE 'audio:%' 
    AND (calldate >= '2016-10-26 15:00:00' 
    AND calldate <= '2016-10-26 16:00:00') 
    AND duration > 8 
ORDER BY uniqueid DESC LIMIT 200 OFFSET 0; 

它運行在39.12秒!! (注意,唯一的區別是在calldate字段)

我真的不太瞭解MySQL的性能,所以我不知道從哪裏開始,也許是索引問題?

+0

謝謝,解釋的是一個良好的開端,但在這種情況下,只有一個表,所以我不能起到多大的與執行計劃。 – Soborno

+0

我以前沒有用過EXPLAIN,但是對於我在這種情況下看到的,只有一行,而且possible_keys和keys字段與我當前的索引(calldate列上的那個)匹配,所以我不知道真的該怎麼辦(雖然有一個領域,我沒有得到那是額外的領域,它說「使用where;使用filesort」) – Soborno

+0

「使用filesort」意味着你的臨時表沒有內存空間。你有增加緩衝空間進行排序(取決於你的表引擎類型)。 – arheops

回答