查询100k记录表,超出执行时间

时间:2017-07-27 01:27:11

标签: php mysql arrays

每个成员都有多个记录存储在数据库中。我需要为每个用户总结一列,并从另一列获得最高/最低值。该表有超过100k的记录,一个用户可能在表中有超过2k的记录。

我试过了:

my_reader = open('file.csv', encoding = 'utf-8')
rows = 0
apples = 0

for record in my_reader:
    if record.count('apple') > 0:
        rows += 1
        apples += record.count('apple')

print('{apples: %d } {# of rows: %d }' % (apples, rows))

但是将时间限制设置为300确实是这样做的正确方法吗?我还尝试了一个准备好的语句,只在循环中分配ID,以及其他一些东西。所有这些都不能正常工作。

1 个答案:

答案 0 :(得分:1)

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的角度来看,这样做的速度要快得多。