Php 查询100k记录表,超出执行时间
每个成员都有多条记录存储在数据库中。我需要对每个用户的一列求和,并从另一列获得最高/最低值。该表有超过100k条记录,一个用户在该表中可能有超过2k条记录 我试过这个:Php 查询100k记录表,超出执行时间,php,mysql,arrays,Php,Mysql,Arrays,每个成员都有多条记录存储在数据库中。我需要对每个用户的一列求和,并从另一列获得最高/最低值。该表有超过100k条记录,一个用户在该表中可能有超过2k条记录 我试过这个: $query = $mysqli->query("SELECT DISTINCT `id` FROM `table`"); if($query){ $IDs = new SplFixedArray($query->num_rows); $IDs = $query->fetch_all(); uns
$query = $mysqli->query("SELECT DISTINCT `id` FROM `table`");
if($query){
$IDs = new SplFixedArray($query->num_rows);
$IDs = $query->fetch_all();
unset($query, $row);
set_time_limit(300);
foreach ($IDs as $key => $value) {
$query = $mysqli->query("SELECT SUM(price), dtime FROM `table` WHERE `id` = '".$value[0]."' ORDER BY dtime DESC");
if($query){
$row = $query->fetch_assoc();
print_r($row);
}
}
但将时间限制设定为300真的是正确的做法吗?我还尝试了一个预先准备好的语句,只在循环中分配ID,以及其他一些事情。所有这些都不能像我想象的那样正常工作。100k条记录确实没有那么多,这个查询应该没有理由花费超过5分钟的时间 与其获得一个不同的ID列表并遍历它们,为每个ID查询这些值,不如一次完成所有工作,然后遍历结果以完成需要的工作
select
`id`,
sum(`price`) as `sum_price`,
min(`dtime`) as `min_dtime`,
max(`dtime`) as `max_dtime`
from
`table`
group by
`id`
(这是假设您需要获取的最小值和最大值的“其他字段”是dtime
)
虽然我在PHP方面不是很强,但从SQL的角度来看,这样做要快得多。你的问题没有任何意义。请提供数据库表模式、示例数据和所需结果的上下文。我认为Jeff是对的。100000个查询需要很长时间,而MySQL将很快完成。