【问题标题】:Speed up mysql query inside a while loop在while循环中加速mysql查询
【发布时间】:2013-10-29 00:03:14
【问题描述】:

我有以下疑问:

while ($start_date <= $end_date) {

            $date_array[] = date('d/m/Y H:i:s', strtotime($start_date));

            $start_date_interval = date('Y-m-d H:i:s', strtotime($start_date) + $interval);
            echo date('d/m/Y H:i:s', strtotime($start_date)) . ' ------> ';


            $query = "SELECT COUNT(id) AS call_count FROM callsepaug "
                    . "WHERE (i_billable = 1 AND ((start_time >= '$start_date' AND start_time < '$start_date_interval') "
                    . "OR (start_time > '$start_date_past' AND start_time < '$start_date_interval' "
                    . "AND end_time >= '$start_date')));";


            $result = mysqli_query($connection, $query);

            $row = mysqli_fetch_array($result, MYSQLI_ASSOC);

            $data[] = $row['call_count'];
            echo $row["call_count"] . ' active calls.<br>';

            $start_date = date('Y-m-d H:i:s', strtotime($start_date) + $interval);
            // echo $start_date . '<br>';
        }

但是这个查询太慢了。该数据库包含大量数据。检查开始和结束给定时间的 15 分钟间隔的查询大约需要 45 秒。我怎样才能大大提高速度?

【问题讨论】:

  • 首先索引您的 start_time 和 end_time
  • 假设 start_timeend_time 被索引,我会说问题可能是 OR 条件。尝试使用两个子查询的union

标签: php mysql sql performance optimization


【解决方案1】:

最好在循环之外编写所有查询,因为它会为每次迭代执行查询 获取开始日期和结束日期之间的所有记录并在您的循环中处理它们

【讨论】:

  • 对于所有认为这应该是评论的人,请记住,一个人需要 50 的声誉才能评论其他人的帖子。
猜你喜欢
  • 2013-03-11
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 2023-03-30
  • 2013-08-10
  • 2018-12-14
相关资源
最近更新 更多