Выполнение одного и того же запроса MYSQL для временных периодов в течение дня, есть ли лучший способ? - PullRequest
0 голосов
/ 04 апреля 2019

Итак, я составляю отчет для моих директоров. Это почасовая разбивка вызовов и операторов, которые подключены к нашей системе набора номера, поэтому мы можем видеть производительность в течение дня. По мере того, как день продолжается, появляется все больше запросов и все больше и больше результатов, что делает его очень медленным.

У меня вопрос: есть ли лучший способ сделать это, чем вызывать один и тот же запрос с разными параметрами.

Один из столбцов проиндексирован, и я только выбираю это.

Будет ли COUNT () быстрее, чем считать строки с помощью num_rows?

Я просто не уверен, что лучше не останавливать работу над этой базой данных, а также улучшать производительность.

Так что это фрагмент, но я также выполняю еще 30 похожих запросов, получая разные результаты из разных таблиц. Это займет некоторое время, чтобы загрузить. Не лучше ли выбрать все за день, а затем отформатировать данные с помощью PHP? Я не уверен, что лучший способ сделать это. В приведенном ниже запросе я выбираю *, но с тех пор я изменил его, чтобы просто вытянуть индексированный столбец, но это, похоже, не имеет большого значения. Спасибо заранее.

$Callssql9to11 = "SELECT * FROM `outbound_log_today` WHERE `campaign_id`='003'
                        AND `call_date` BETWEEN (TIME '09:00:00') AND TIME ('11:00:00')";
    $Callssql9to11result = $conn->query($Callssql9to11);
    /////////////////11-12///////////////////////////
    $Callssql11to12 = "SELECT * FROM `outbound_log_today` WHERE `campaign_id`='003'
                        AND `call_date` BETWEEN (TIME '11:00:00') AND TIME ('12:00:00')";
    $Callssql11to12result = $conn->query($Callssql11to12);
    /////////////////12-13///////////////////////////
    $Callssql12to13 = "SELECT * FROM `outbound_log_today` WHERE `campaign_id`='003'
                        AND `call_date` BETWEEN (TIME '12:00:00') AND TIME ('13:00:00')";
    $Callssql12to13result = $conn->query($Callssql12to13);
    /////////////////13-14///////////////////////////
    $Callssql13to14 = "SELECT * FROM `outbound_log_today` WHERE `campaign_id`='003'
                        AND `call_date` BETWEEN (TIME '13:00:00') AND TIME ('14:00:00')";
    $Callssql13to14result = $conn->query($Callssql13to14);
    /////////////////14-15///////////////////////////
    $Callssql14to15 = "SELECT * FROM `outbound_log_today` WHERE `campaign_id`='003'
                        AND `call_date` BETWEEN (TIME '14:00:00') AND TIME ('15:00:00')";
    $Callssql14to15result = $conn->query($Callssql14to15);
    /////////////////15-16///////////////////////////
    $Callssql15to16 = "SELECT * FROM `outbound_log_today` WHERE `campaign_id`='003'
                        AND `call_date` BETWEEN (TIME '15:00:00') AND TIME ('16:00:00')";
    $Callssql15to16result = $conn->query($Callssql15to16);
    /////////////////16-17///////////////////////////
    $Callssql16to17 = "SELECT * FROM `outbound_log_today` WHERE `campaign_id`='003'
                        AND `call_date` BETWEEN (TIME '16:00:00') AND TIME ('17:00:00')";
    $Callssql16to17result = $conn->query($Callssql16to17);
    /////////////////17-18///////////////////////////
    $Callssql17to18 = "SELECT * FROM `outbound_log_today` WHERE `campaign_id`='003'
                        AND `call_date` BETWEEN (TIME '17:00:00') AND TIME ('18:00:00')";
    $Callssql17to18result = $conn->query($Callssql17to18);
    /////////////////18-20///////////////////////////
    $Callssql18to20 = "SELECT * FROM `outbound_log_today` WHERE `campaign_id`='003'
                        AND `call_date` BETWEEN (TIME '19:00:00') AND TIME ('20:00:00')";
    $Callssql18to20result = $conn->query($Callssql18to20);
    /////////////////ALL///////////////////////////
    $CallssqlALL = "SELECT * FROM `outbound_log_today` WHERE `campaign_id`='003'
                        AND `call_date` BETWEEN (TIME '09:00:00') AND TIME ('20:00:00')";
    $CallssqlALLresult = $conn->query($CallssqlALL);


///////////////////9-11///////////////////////////
    $Connectssql9to11 = "SELECT * FROM `outbound_log_today`WHERE `campaign_id`='003'
                        AND `call_date`BETWEEN (TIME '09:00:00') AND TIME ('11:00:00') AND `status` IN (SELECT (STATUS) FROM `status_combined`WHERE `human_answered`='Y')";
    $Connectssql9to11result = $conn->query($Connectssql9to11);


$Leadssql9to11 = "SELECT * FROM `outbound_log_today`WHERE `campaign_id`='003'
                        AND `call_date`BETWEEN (TIME '09:00:00') AND TIME ('11:00:00')
                        AND `status`='passed'";
    $Leadssql9to11result = $conn->query($Leadssql9to11);



$Agentssql9to11 = "SELECT DISTINCT USER FROM `outbound_log_today`WHERE `campaign_id`='003'
                        AND `call_date`BETWEEN (TIME '09:00:00') AND TIME ('11:00:00') AND `user` NOT IN ('VDAD')";
    $Agentssql9to11result = $conn->query($Agentssql9to11);

/////////////////// html //////////////////////////
    <tr>
        <td></td>
        <th scope="col">9 - 11</th>
        <th scope="col">11 - 12</th>
        <th scope="col">12 - 13</th>
        <th scope="col">13 - 14</th>
        <th scope="col">14 - 15</th>
        <th scope="col">15 - 16</th>
        <th scope="col">16 - 17</th>
        <th scope="col">17 - 18</th>
        <th scope="col">18 - 19</th>
        <th scope="col">Total</th>
    </tr>
    <tr>
        <th scope="row">Calls</th>
        <td><?php echo $Callssql9to11result->num_rows; ?></td>
        <td><?php echo $Callssql11to12result->num_rows; ?></td>
        <td><?php echo $Callssql12to13result->num_rows; ?></td>
        <td><?php echo $Callssql13to14result->num_rows; ?></td>
        <td><?php echo $Callssql14to15result->num_rows; ?></td>
        <td><?php echo $Callssql15to16result->num_rows; ?></td>
        <td><?php echo $Callssql16to17result->num_rows; ?></td>
        <td><?php echo $Callssql17to18result->num_rows; ?></td>
        <td><?php echo $Callssql18to20result->num_rows; ?></td>
        <td><?php echo $CallssqlALLresult->num_rows; ?></td>
    </tr>
    <tr>
        <th scope="row">Connect%</th>
        <td><?php if($Callssql9to11result->num_rows!=0){echo number_format($Connectssql9to11result->num_rows / $Callssql9to11result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Callssql11to12result->num_rows!=0){echo number_format($Connectsql11to12result->num_rows / $Callssql11to12result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Callssql12to13result->num_rows!=0){echo number_format($Connectssql12to13result->num_rows / $Callssql12to13result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Callssql13to14result->num_rows!=0){echo number_format($Connectssql13to14result->num_rows / $Callssql13to14result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Callssql14to15result->num_rows!=0){echo number_format($Connectssql14to15result->num_rows / $Callssql14to15result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Callssql15to16result->num_rows!=0){echo number_format($Connectssql15to16result->num_rows / $Callssql15to16result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Callssql16to17result->num_rows!=0){echo number_format($Connectssql16to17result->num_rows / $Callssql16to17result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Callssql17to18result->num_rows!=0){echo number_format($Connectssql17to18result->num_rows / $Callssql17to18result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Callssql18to20result->num_rows!=0){echo number_format($Connectssql18to20result->num_rows / $Callssql18to20result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($CallssqlALLresult->num_rows!=0){echo number_format($ConnectssqlALLresult->num_rows / $CallssqlALLresult->num_rows * 100, 2);}else{echo "0";} ?>%</td>
    </tr>
    <tr>
        <th scope="row">Connect</th>
        <td><?php echo $Connectssql9to11result->num_rows; ?></td>
        <td><?php echo $Connectsql11to12result->num_rows; ?></td>
        <td><?php echo $Connectssql12to13result->num_rows; ?></td>
        <td><?php echo $Connectssql13to14result->num_rows; ?></td>
        <td><?php echo $Connectssql14to15result->num_rows; ?></td>
        <td><?php echo $Connectssql15to16result->num_rows; ?></td>
        <td><?php echo $Connectssql16to17result->num_rows; ?></td>
        <td><?php echo $Connectssql17to18result->num_rows; ?></td>
        <td><?php echo $Connectssql18to20result->num_rows; ?></td>
        <td><?php echo $ConnectssqlALLresult->num_rows; ?></td>
    </tr>
    <tr>
        <th scope="row">Conv%</th>
        <td><?php if($Leadssql9to11result->num_rows!=0){echo number_format($Leadssql9to11result->num_rows / $Connectssql9to11result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Leadsql11to12result->num_rows!=0){echo number_format($Leadsql11to12result->num_rows / $Connectsql11to12result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Leadssql12to13result->num_rows!=0){echo number_format($Leadssql12to13result->num_rows / $Connectssql12to13result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Leadssql13to14result->num_rows!=0){echo number_format($Leadssql13to14result->num_rows / $Connectssql13to14result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Leadssql14to15result->num_rows!=0){echo number_format($Leadssql14to15result->num_rows / $Connectssql14to15result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Leadssql15to16result->num_rows!=0){echo number_format($Leadssql15to16result->num_rows / $Connectssql15to16result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Leadssql16to17result->num_rows!=0){echo number_format($Leadssql16to17result->num_rows / $Connectssql16to17result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Leadssql17to18result->num_rows!=0){echo number_format($Leadssql17to18result->num_rows / $Connectssql17to18result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($Leadssql18to20result->num_rows!=0){echo number_format($Leadssql18to20result->num_rows / $Connectssql18to20result->num_rows * 100, 2);}else{echo "0";} ?>%</td>
        <td><?php if($LeadssqlALLresult->num_rows!=0){echo number_format($LeadssqlALLresult->num_rows / $ConnectssqlALLresult->num_rows * 100, 2);}else{echo "0";} ?>%</td>
    </tr>
    <tr>
        <th scope="row">Leads</th>
        <td><?php echo $Leadssql9to11result->num_rows; ?></td>
        <td><?php echo $Leadsql11to12result->num_rows; ?></td>
        <td><?php echo $Leadssql12to13result->num_rows; ?></td>
        <td><?php echo $Leadssql13to14result->num_rows; ?></td>
        <td><?php echo $Leadssql14to15result->num_rows; ?></td>
        <td><?php echo $Leadssql15to16result->num_rows; ?></td>
        <td><?php echo $Leadssql16to17result->num_rows; ?></td>
        <td><?php echo $Leadssql17to18result->num_rows; ?></td>
        <td><?php echo $Leadssql18to20result->num_rows; ?></td>
        <td><?php echo $LeadssqlALLresult->num_rows; ?></td>
    </tr>
    <tr>
        <th scope="row">Active Agents</th>
        <td><?php echo $Agentssql9to11result->num_rows; ?></td>
        <td><?php echo $Agentsql11to12result->num_rows; ?></td>
        <td><?php echo $Agentssql12to13result->num_rows; ?></td>
        <td><?php echo $Agentssql13to14result->num_rows; ?></td>
        <td><?php echo $Agentssql14to15result->num_rows; ?></td>
        <td><?php echo $Agentssql15to16result->num_rows; ?></td>
        <td><?php echo $Agentssql16to17result->num_rows; ?></td>
        <td><?php echo $Agentssql17to18result->num_rows; ?></td>
        <td><?php echo $Agentssql18to20result->num_rows; ?></td>
        <td><?php echo $totalAgents; ?></td>
    </tr>
    <tr>
        <th scope="row">Calls Per Agent</th>
        <td><?php if($Callssql9to11result->num_rows!=0){echo number_format($Callssql9to11result->num_rows / $Agentssql9to11result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Callssql11to12result->num_rows!=0){echo number_format($Callssql11to12result->num_rows / $Agentsql11to12result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Callssql12to13result->num_rows!=0){echo number_format($Callssql12to13result->num_rows / $Agentssql12to13result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Callssql13to14result->num_rows!=0){echo number_format($Callssql13to14result->num_rows / $Agentssql13to14result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Callssql14to15result->num_rows!=0){echo number_format($Callssql14to15result->num_rows / $Agentssql14to15result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Callssql15to16result->num_rows!=0){echo number_format($Callssql15to16result->num_rows / $Agentssql15to16result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Callssql16to17result->num_rows!=0){echo number_format($Callssql16to17result->num_rows / $Agentssql16to17result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Callssql17to18result->num_rows!=0){echo number_format($Callssql17to18result->num_rows / $Agentssql17to18result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Callssql18to20result->num_rows!=0){echo number_format($Callssql18to20result->num_rows / $Agentssql18to20result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($CallssqlALLresult->num_rows!=0){echo number_format($CallssqlALLresult->num_rows / $totalAgents, 2);}else{echo "0";} ?></td>
    </tr>
    <tr>
        <th scope="row">Connects Per Agent</th>
        <td><?php if($Connectssql9to11result->num_rows!=0){echo number_format($Connectssql9to11result->num_rows / $Agentssql9to11result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Connectsql11to12result->num_rows!=0){echo number_format($Connectsql11to12result->num_rows / $Agentsql11to12result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Connectssql12to13result->num_rows!=0){echo number_format($Connectssql12to13result->num_rows / $Agentssql12to13result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Connectssql13to14result->num_rows!=0){echo number_format($Connectssql13to14result->num_rows / $Agentssql13to14result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Connectssql14to15result->num_rows!=0){echo number_format($Connectssql14to15result->num_rows / $Agentssql14to15result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Connectssql15to16result->num_rows!=0){echo number_format($Connectssql15to16result->num_rows / $Agentssql15to16result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Connectssql16to17result->num_rows!=0){echo number_format($Connectssql16to17result->num_rows / $Agentssql16to17result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Connectssql17to18result->num_rows!=0){echo number_format($Connectssql17to18result->num_rows / $Agentssql17to18result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Connectssql18to20result->num_rows!=0){echo number_format($Connectssql18to20result->num_rows / $Agentssql18to20result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($ConnectssqlALLresult->num_rows!=0){echo number_format($ConnectssqlALLresult->num_rows / $totalAgents, 2);}else{echo "0";} ?></td>
    </tr>
    <tr>
        <th scope="row">Leads Per Agent</th>
        <td><?php if($Leadssql9to11result->num_rows!=0){echo number_format($Leadssql9to11result->num_rows / $Agentssql9to11result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Leadsql11to12result->num_rows!=0){echo number_format($Leadsql11to12result->num_rows / $Agentsql11to12result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Leadssql12to13result->num_rows!=0){echo number_format($Leadssql12to13result->num_rows / $Agentssql12to13result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Leadssql13to14result->num_rows!=0){echo number_format($Leadssql13to14result->num_rows / $Agentssql13to14result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Leadssql14to15result->num_rows!=0){echo number_format($Leadssql14to15result->num_rows / $Agentssql14to15result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Leadssql15to16result->num_rows!=0){echo number_format($Leadssql15to16result->num_rows / $Agentssql15to16result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Leadssql16to17result->num_rows!=0){echo number_format($Leadssql16to17result->num_rows / $Agentssql16to17result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Leadssql17to18result->num_rows!=0){echo number_format($Leadssql17to18result->num_rows / $Agentssql17to18result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($Leadssql18to20result->num_rows!=0){echo number_format($Leadssql18to20result->num_rows / $Agentssql18to20result->num_rows, 2);}else{echo "0";} ?></td>
        <td><?php if($LeadssqlALLresult->num_rows!=0){echo number_format($LeadssqlALLresult->num_rows / $totalAgents, 2);}else{echo "0";} ?></td>
    </tr>
</table>





    9 - 11  11 - 12 12 - 13 13 - 14 14 - 15 15 - 16 16 - 17 17 - 18 18 - 19 Total
Calls   2677    6444    5865    72  0   0   0   0   0   15057
Connect%    5.83%   3.26%   2.59%   8.33%   0%  0%  0%  0%  0%  3.48%
Connect 156 210 152 6   0   0   0   0   0   524
Conv%   11.54%  9.05%   8.55%   0%  0%  0%  0%  0%  0%  9.54%
Leads   18  19  13  0   0   0   0   0   0   50
Active Agents   19  25  22  7   0   0   0   0   0   18.25
Calls Per Agent 140.89  257.76  266.59  10.29   0   0   0   0   0   825.04
Connects Per Agent  8.21    8.40    6.91    0.86    0   0   0   0   0   28.71
Leads Per Agent 0.95    0.76    0.59    0   0   0   0   0   0   2.74

1 Ответ

0 голосов
/ 04 апреля 2019

Нет необходимости запускать запрос для каждого часа

SELECT call_date, COUNT(call_date) FROM `outbound_log_today` WHERE `campaign_id`='003'
GROUP BY call_date`

если я правильно укажу структуру таблицы, этот запрос даст вам количество строк для каждой call_date. Это работает, если вы округляете каждую call_date до часа, когда это происходит, а не до точной отметки времени

Если у вас есть метка времени, вы можете сделать:

SELECT HOUR(call_date), COUNT(call_date) FROM `outbound_log_today` WHERE `campaign_id`='003'
GROUP BY HOUR(call_date)`

HOUR () извлечет часть часа из вашего времени. То есть если у вас есть 09:03:00, это даст вам 09.

Каждый раз, когда вы будете запускать этот запрос, вы получите счетчик количества строк, которое у вас есть за каждый час выполнения запроса. При каждой загрузке страницы таблица будет заполняться обновленными значениями. Затем, основываясь на столбце даты звонка, вы можете заполнить каждую ячейку соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...