数据库读取一万条记录,记录里有ID号和人名,如何读取出格式为 10个为一组的人名然后用逗号隔开

数据库读取一万条记录,记录里有ID号和人名,如何读取出格式为 10个为一组的人名然后用逗号隔开,第1张

var

nam_list:string

i:integer

i:=0

nam_list:=''

query.first

while  not query.eof do

begin

nam_list:=nam_list+query.fieldbyname('name').asstring

inc(i)

if i=9 then

begin

nam_list:=nam_list+','

i:=0

end

query.next

end

nam_list即是结果。

我只是用PASCAL 写了个大概的过程,你可以去细划一下。

如果数据很庞大的情况,估计没有人会直接使用

select * from table

select * from table limit 100000012

之类的SQL语句,这样的 *** 作别说数据库的 *** 作很慢了,在网络IO传输也是一个很大的问题,

把一千万的数据读取出来在网络进行传输,这样性能消耗也会有瓶颈。

所以,读取大批量的数据一般都是采用分批次的读取方式。

(一)通过测试,一万条数据一次性读取出来所花费的时间要比分十次,每次读1千数据的速度要慢很多。

(二),主键是uuid,可以进行排序,利用排序和比较值的大小来分批读取数据。

SELECT * FROM `kw_seo_keyword` as t

WHERE t.id >'31baf874-0fc5-4bb0-82ff-7bc77c6b63f5'

ORDER BY t.id

LIMIT 10001234

每一次,读取一千条数据,然后取这一千条数据的有序集合的最后一条数据的id,在进行大小的比较。如此反复,直到数据读取完为止。

(三),安全性的考虑,执行上千万的数据,有时候程序出现异常,结果修改异常后再重新这上千万的数据,那就太蛋疼了。所以我们分批次处理数据的时候。

比如说,我们每次读取一千条数据,等集合的数据超过100万的时候,就处理数据,然后通过一个redis的key来保存最后一次的id。

思路:

可以用流来读取,并且每次读取二十条数据,存入缓存中buff,然后把这二十条数据清空,再读后面的数据以此类推,读完之后把缓存中的数据,一并写入到数据库中,你也可以在读取的时候把数据设大一点


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9852251.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存