我有,我是無法理解的問題.. 我有兩個疑問(該數據庫爲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的性能,所以我不知道從哪裏開始,也許是索引問題?
謝謝,解釋的是一個良好的開端,但在這種情況下,只有一個表,所以我不能起到多大的與執行計劃。 – Soborno
我以前沒有用過EXPLAIN,但是對於我在這種情況下看到的,只有一行,而且possible_keys和keys字段與我當前的索引(calldate列上的那個)匹配,所以我不知道真的該怎麼辦(雖然有一個領域,我沒有得到那是額外的領域,它說「使用where;使用filesort」) – Soborno
「使用filesort」意味着你的臨時表沒有內存空間。你有增加緩衝空間進行排序(取決於你的表引擎類型)。 – arheops