Оптимизировать отчеты php sql
Нужно оптимизировать запрос, сейчас выполнение запроса занимает очень большое время, на сколько я понял проблема в сортировке
CREATE TEMPORARY TABLE t1 AS SELECT calls.setup_time, calls.cli, calls.cld,
cdrs.i_account, cdrs.cost, cdrs.connect_time, cdrs.disconnect_time, cdrs.duration,
cdrs.cli_in, cdrs.cld_in, cdrs.billed_duration, cdrs.result, cdrs.i_cdr, cdrs.delay,
cdrs.remote_ip, cdrs.prefix, cdrs.lrn_cld, cdrs.lrn_cld_in, cdrs.area_name,
calls.call_id, cdrs.release_source
FROM cdrs
JOIN calls USING(i_call)
WHERE {$pre_clause['sql']}
ORDER BY calls.setup_time DESC
{$sql_cdrs_limit}";
$params = $pre_clause['params'];
$db->prepNexec($sql, $params);
вот запрос если убрать ORDER BY calls.setup_time DESC то выполняется за секунды
думаю можно ли этот ордер делать в php
и потом делает еще один запрос чтобы статистику внутри таблицы посчитать
function get_total_info($clause, $cdr_currency) {
global $db;
global $caller, $caller_type, $i_caller;
$sql_acct = "SELECT COUNT(*) AS a, SUM(ROUND(duration)) / 60.0 AS b, SUM(billed_duration) / 60.0 AS c,
SUM((cdrs.cost * x1.rate) / x2.rate) AS d
FROM t1 AS cdrs
JOIN accounts ON cdrs.i_account = accounts.i_account
JOIN x_rates x1 ON (x1.i_customer = accounts.i_customer
AND x1.iso_4217 = accounts.base_currency )
JOIN x_rates x2 ON (x2.i_customer = accounts.i_customer AND x2.iso_4217 = ?)
WHERE {$clause['acct']['sql']}";
$params_acct = array_merge(array($cdr_currency), $clause['acct']['params']);
$sql_cust = "SELECT COUNT(*) AS a, SUM(ROUND(cdrs_customers.duration)) / 60.0 AS b,
SUM(cdrs_customers.billed_duration) / 60.0 AS c,
SUM((cdrs_customers.cost * x1.rate) / x2.rate) AS d
FROM t2 AS cdrs_customers
JOIN customers USING (i_customer)
JOIN x_rates x1 ON (x1.i_customer = customers.i_wholesaler
AND x1.iso_4217 = customers.base_currency)
JOIN x_rates x2 ON (x2.i_customer = customers.i_wholesaler AND x2.iso_4217 = ?)
WHERE {$clause['cust']['sql']}";
$params_cust = array_merge(array($cdr_currency), $clause['cust']['params']);
я думал может можно взять данные в пхп и там уже отсортировать и делать тотал
Полный файл в атачменте, если можете оптимизировать, то пишите, количество записей может быть несколько миллионов.
Додатки 1
-
6256 128 2 4 Здравствуйте, я работаю в сфере веб програмирования более 6 лет, и сотрудничал с разными компаниями и клиентами. Я могу осуществить ваш проект и реолизовать ваши идеи касающиеся веб програмирования. Работая со мной вы получите высококачественный код и новотехнологическую систему с современными стандартами и обработкой.
Почему выбрать меня?
1. Работаю без предоплаты
2. Бесплатная помощь по сайту после выполнения заказа
3. Выполню заказ в максимально короткие сроки
-
Вынесения сортировки в php не поможет. У тебя сначала выбираются миллионы записей, а потом они сортируются. Изучи https://dev.mysql.com/doc/refman/5.7/en/order-by-optimization.html
А если есть возможность уменьшить выборку, то это лучший вариант. Неужели будут использоваться все миллионы данных? Делай план запросов и смотри, что имеет больший вес. Многое зависит от конкретных условий в where, индексов, количества данных. Но реально оптимизировать можно запрос в конкретных where параметрах. С динамикой это все намного сложнее. Подумай в сторону изменения логики запроса. Покрути с разных сторон.
-
Актуальні фриланс-проєкти в категорії PHP
Сайт для автошколи WordPress з системою управління.Треба розробити сайт для невеликої автошколи на WordPress з системою управління навчання і оплати. Білше цікавить не дизайн, а сама система управляння, яку хочемо в адмінці сайту. Потрібен приватний кабінет для учнів, де кожен зможе зайти в свій кабінет і бачити статус оплат… PHP, Веб-програмування ∙ 9 ставок |
Синхронизація CRM з ERP
68 800 UAH
|
Автоматизація переадресації листів для домену (MX forward)Є необхідність розробити MX переадресацію для поштового домену (усі листи що приходять на домен). Це має бути аналог: https://improvmx.com/ Наразі мова йде про саме технічну частину пересилання листів, без білінгу. На скільки я розумію є схоже рішення з GitHub:… PHP, Веб-програмування |
Телеграм отримати смс php
12 345 UAH
потрібно витягувати, наприклад, в блокнот на сайт повідомлення з бота. Бот не мій - сторонній. Сайт на php. PHP ∙ 2 ставки |
Gmail отримати повідомлення php
12 345 UAH
потрібно отримувати листи з пошти [email protected] через api gmail з сайту (php) завдання полягає лише в отриманні нових листів, обробку зроблю самостійно PHP ∙ 5 ставок |