我有一个2,760,000行的表。在mysqlworkbench中,从原始表中选择*需要36秒。我想在Python中使用这个现有的表创建另一个表(使用my_func()来转换值)。Mysql/python fetchall()无法处理结果,因为它太大
但是,当我在命令行中运行它时,它似乎永远不会完成。
sql = "SELECT ID, Eye, Values FROM my_original_table"
curQuery.execute(sql)
for row in curQuery.fetchall():
dat = list(row)
id = dat.pop(0)
eye = dat.pop(0)
values = dat.pop(0)
v = my_func(values)
if v != None :
sql = "INSERT INTO new_table VALUES ('%s', '%s', %d);" % (id, eye, v)
print(sql)
curExe.execute(sql)
db.commit()
但是,如果我加入LIMIT 0,10给我的第一选择SQL(如下图所示),它运行良好。所以,这意味着我的计划是正确的。但是这是否意味着没有“限制”,数据对我的电脑来说太多了?我该如何解决这个问题?
sql = "SELECT ID, Eye, Values FROM ETCEpisodeVisualAcuity LIMIT 0,10"
顺便说一句,从未构造SQL用字符串格式化;使用参数化查询。 (在许多Python SQL库中,只需删除查询中%s的单引号,并用逗号代替最后一个%,就可以在代码中修复此问题) – geoffspear
270万行听不到** * *很多,对吗? –
顺便说一句,如果你在'new_table'中有一个索引,它会在* every *插入之后被重建。这需要时间。 –