我有处理所有这些游标,连接等的DB类。我有3种方法:
return_all_records:
(SELECT * FROM TABLE)
记录总数:
(SELECT COUNT(*) FROM TABLE)
和return_record_by_pk:
(SELECT * FROM TABLE WHERE pk=?)
我应该逐行处理数据。对数据库进行1个大查询还是对许多小查询进行比较好?
PS。我在数据库中有很多记录。有点像10 ^ 8。 一次收到他们并不容易
for record in DB.return_all_records(): # 1 big query
#code
for pk in range(DB.count_of_records()):
DB.return_record_by_pk(pk) #small queries
答案 0 :(得分:1)
这在很大程度上取决于底层数据库驱动程序。您应该/可以考虑限制在SQL上使用where
条件返回的行数,以指定您“开始行”和“结束行”,而不是一次获取所有记录。然后,您可以滑动一次处理2000行。请确保使用order by
对数据进行排序,否则返回的数据将会/可能会有所不同。取决于您使用的数据库,“限制”具有不同的语法(例如,Oracle中的rownum
,使用MySQL时limit
和offset
的组合,...)。根据您用于排序的列(以及是否为索引建立索引),排序可能会对执行时间产生巨大影响,并且从表的中间或结尾获取“窗口”可能会变慢