SONG_CA 2022-07-27 20:31
浏览 11
已结题

同样的代码,同样的数据量,为啥这个循环执行越来越慢?

有一个3十万条的字典表,导入sqlite,并且对前两个字段创建索引。步骤1

模拟创建了一个3百万条的记录,步骤2,想把这个表与步骤1中的字典表进行匹配,查询country的值

步骤3, 对步骤2中的3百万条记录的表进行遍历,每执行1万条记录,打印所需时间,为啥这个时间间隔越来越大?

import sqlite3
import time

connection=sqlite3.connect("aquaium.db")
cursor=connection.cursor()

cursor.execute("DROP table IF EXISTS ip_addr")
cursor.execute("create table ip_addr (start_ip integer,end_ip integer, country Text)")
# 1 创建的一个字典表,包含3十万条如下记录
'''
0,4,‘0A’
5,9,'5A'
......
'''
tmp=[]
i=0
ip_lst=[]
while(i<300000):
    ip_lst.append([i*5,i*5+4,str(i*5)+'A'])
    i+=1
print(len(ip_lst))
for a in ip_lst:
    tmp=[a[0],a[1],a[2]]
    cursor.execute("insert into ip_addr (start_ip,end_ip,country) values(?,?,?)",tmp)
connection.commit()
cursor.execute("create index index_ip on ip_addr(start_ip,end_ip)")

#2 创建一个3百万的list,其中的每个元素为一个列表。
'''
[0,'']
[1,'']
......
[3000000,'']

'''
myip=[]
i=0
while(i<3000000):
    myip.append([i,''])
    i+=1
print(len(myip))


#3 对上述3百万的列表进行遍历,依次从1中创建的字典表中检出‘country’的值, 每执行1万条查询,打印出所用
# 时间,为啥下面的这段循环进行起来越来越慢????

i=0
start_time = time.time()
while(i<len(myip)):
    
    cursor.execute("select country from ip_addr where (%d >=start_ip  and %d<=end_ip)" %((i%300000),(i%300000)))
    test1=list(cursor.fetchone())
    if i%10000==0:
        print(i,test1)
        print("--- %s seconds ---" % (time.time() - start_time))
        start_time = time.time()
    i+=1

cursor.close()
connection.close()

 

 

 

 

下面是输出,为啥每次执行1万条查询的时间越来越大?3->7->10->14->18->22?

 

 

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 8月4日
    • 创建了问题 7月27日

    悬赏问题

    • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
    • ¥20 软件测试决策法疑问求解答
    • ¥15 win11 23H2删除推荐的项目,支持注册表等
    • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
    • ¥15 qt6.6.3 基于百度云的语音识别 不会改
    • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
    • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
    • ¥15 lingo18勾选global solver求解使用的算法
    • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
    • ¥20 测距传感器数据手册i2c