php多表查询优化问题
问题描述
有一个需求,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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论