Я использую PHP и MYSQL диаграмму concurenncy вызова из базы данных Asterisk CDR,улучшить скорость этого запроса MYSQL
настоящего времени я использую следующее подготовленное заявление:
$query=$cdrdb->prepare('select count(acctid) from cdr where calldate between ? and ? or DATE_ADD(calldate, INTERVAL duration SECOND) between ? and ?');
, а затем следующий Еогеасп цикл для ввода переменных:
foreach ($timerange as $startdatetime){
$start=$startdatetime->format("Y-m-d H:i:s");
$enddatetime=new DateTime($start);
$enddatetime->Add($interval);
$end=$enddatetime->format("Y-m-d H:i:s");
if(!$query->execute(array($start, $end, $start, $end))){
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
if (!($res = $query->fetchall())) {
echo "Getting result set failed: ";
}
array_push($callsperinterval,$res[0][0]);
}
TimeRange может быть каждый час в течение дня, каждый день в течение месяца или каждую неделю в течение года.
столбец calldate помечен как индексный столбец.
В таблице в настоящее время хранится 122 000 записей.
результат выполнения ОБЪЯСНИТЬ по запросу:
mysql> explain select count(acctid) from cdr where calldate between '2014-10-02 23:30:00' and '2014-11-03 00:00:00' or DATE_ADD(calldate, INTERVAL duration SECOND) between '2014-10-02 23:30:00' and '2014-11-03 00:00:00';
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | cdr | ALL | calldate | NULL | NULL | NULL | 123152 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
Один цикл запроса занимает около 0.14s так в течение 24-часового периода с интервалом один час сценарий должен закончить примерно за 3,36 секунды, но это заканчивается тем, что занимает около 12 секунд.
В настоящее время весь процесс может занять до 20 секунд, чтобы работать в течение 24 часов, может ли кто-нибудь помочь мне улучшить скорость этого запроса?
Где ваш вопрос? – cybermonkey
Насколько медленным является запрос? – MonkeyZeus
Добавлена информация к исходному вопросу –