使用的原因
有一个很大的列表,要用里面的元素组成sql插入到ck数据库(json格式插入),发现一次性插入会失败(20G的insert sql),所以想到了对索引取模,把sql切割成10000条数据插入一次。
最开始就想到取元素的索引,也就是使用list.index(元素)来取,后来根据日志发现,插入的速度越来越慢,后面仔细想了一下:
问题所在
list.index()虽然是O(1)时间复杂度,但在拥有超大(9000w)元素的列表中是不适用的,因为越往后,越相当于重读整个列表了,
最后使用计数器来实现对列表中元素索引的判断
以下是相关的代码片段
insert_number = 0
number = 10000
for i in all_list:
if (insert_number % number) == 0:
# 是 number 的倍数,就累计之后插入到ck中
insert_str += json.dumps(i, ensure_ascii=False)
insert_number += 1 # 统计插入条数
insert_str = insert_init
else:
# 不是 number 的倍数,就往插入语句中累计
insert_str += json.dumps(i, ensure_ascii=False)
insert_number += 1
评论区