php多表查询优化问题

发布于 2022-09-07 23:03:27 字数 1370 浏览 15 评论 0

问题描述
有一个需求,php要一次性的从多张表里面取出日志数据并返回(用的是mysql)。表是以时间进行划分的,做了分表处理,比如log_20180901、log_20180902这样,现在需要根据时间条件来查询出数据并返回,比如要查询出2018年9月1号到2018年9月15号的日志数据,尝试过两种方法,代码如下:

/**
*@desc: 第一种方法是循环取出数据,拼接进行返回
*@param: $startTime int 开始时间(unix时间戳)
*@pram: $endTime int 结束时间
*@return: $ret array 返回的数据
*/
function fetchDataByLoop($startTime, $endTime){
   $startTime = intval($startTime);
   $endTime = intval($endTime);
   $ret = array();
   while($startTime <= $endTime){
       $table = 'log_'.date("Ymd", $startTime);
       $sql = "SELECT * FROM {$table}";
       $data = $db->getAll($sql);//框架封装的查询方法,这里只是为了说明问题
       if($data){
           $ret[] = $data;
       }
       $startTime += 86400;
   }
  return $ret;
}

/**
*@desc: 第二种方法是使用UNION ALL拼接sql语句,再一次查询取出数据
*@param: $startTime int 开始时间(unix时间戳)
*@pram: $endTime int 结束时间
*@return: $ret array 返回的数据
*/
function fetchDataByUnionAll($startTime, $endTime){
   $startTime = intval($startTime);
   $endTime = intval($endTime);
   $sqlArr = array();
   $ret = array();
   while($startTime <= $endTime){
      $table = 'log_'.date("Ymd", $startTime);
      $sqlArr[] = "SELECT * FROM {$table}";
       $startTime += 86400;
   }
   $sql = implode("UNION ALL", $sqlArr);
   $ret = $db->getAll($sql);//框架封装的查询方法,这里只是为了说明问题
   return $ret;
}

想问一下,在数据量打大的情况,使用上面哪种方法性能会快一些?或者有其他更优化的方法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文