SELECT
cast(t1.destination as unsigned) as prefix,
t2.destination as destination,
FORMAT(sum(t1.terminatecauseid = 1), 0) as calls,
IFNULL(sec_to_time(avg(case when t1.terminatecauseid = 1 then t1.sessiontime end)), 0) as aloc,
CONCAT(TRUNCATE(sum(t1.terminatecauseid = 1) * 100/count(*), 1), '%') as asr,
sum(case when t1.terminatecauseid = 1 then t1.sessiontime end) as duration
FROM
cc_call AS t1
inner join
cc_prefix as t2 ON t1.destination = t2.prefix
inner join
cc_country as t4 ON t1.destination like CONCAT(t4.countryprefix, '%')
WHERE
t1.card_id = '133' AND t1.starttime >= ('2014-06-1')
group by t4.countryprefix
having duration is not null
order by duration DESC
LIMIT 0 , 25
Im делая поисковую систему, я придумал правильные запросы, чтобы получить необходимую мне информацию. БД огромна (1 гб), а запрос иногда вызывает сбой HTTPd-сервера.Очень медленный поисковый запрос MySQL
Выполняется этот запрос, выполняется другой аналогичный запрос для разбивки на страницы (для определения количества страниц), а третий запрос выполняется для общего количества длительности и вызовов.
Все, что в совокупности приводит к очень плохим результатам. Вот пример db в sqlfiddle
Любые советы по повышению эффективности приветствуются.
Я попытался использовать «Просмотр» в какой-то момент с другим запросом, чтобы сузить результаты, пока не получилось.
Какие индексы у вас есть? Соединяется ли первичный или объявленный вторичный ключ? – Philipp
Я предоставил sqlfiddle для удобства, я сделал объединения без учета индексов. –
. JOIN в неиндексированном поле требует полного сканирования таблицы. Неудивительно, что ваш запрос медленный. – Philipp