繁体   English   中英

对全天的时间段运行相同的 MYSQL 查询,有没有更好的方法?

[英]Running the same MYSQL query for time periods throughout the day, is there a better way?

我正在为我的董事生成一份报告。 这是登录到我们拨号系统的呼叫和代理的每小时细分,因此我们可以查看全天的性能。 随着时间的推移,有越来越多的查询和越来越多的结果,这使得它变得非常缓慢。

有没有比使用不同参数调用相同查询更好的方法呢?

其中一列已编入索引,我只是选择了它。

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

无需每小时运行一次查询

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。

每次运行此查询时,您都会获得运行查询的每小时有多少行的计数。每次加载页面时,表中都会填充更新的值。 然后,根据通话日期列,您可以相应地填充每个单元格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM