私は2,760,000行のテーブルを持っています。 mysqlworkbenchでは元のテーブルから*を選択するのに36秒かかります。Mysql/python fetchall()が大きすぎるため結果を処理できません
この既存のテーブルをPythonで使用して別のテーブルを作成したいとします(my_func()を使用して値を変換しています)。
しかし、コマンドラインで実行すると、決して終了しないようです。私は(下記のように)私の最初の選択SQLにLIMIT 0,10を追加した場合
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()
はしかし、それが正常に動作します。つまり、これは私のプログラムが正しいことを意味します。しかし、これは「限界」なしでは、データはコンピュータが扱うにはあまりにも大きいのですか?これをどうすれば解決できますか? documentationパー
sql = "SELECT ID, Eye, Values FROM ETCEpisodeVisualAcuity LIMIT 0,10"
ところで、SQLを構築することはありません文字列の書式設定。パラメータ化されたクエリを使用します。 (多くのPython SQLライブラリでは、クエリの%sの前後にある一重引用符を削除し、最後の%をカンマで置き換えることでコード内でこれを修正できます) – geoffspear
270万行は発音しません** * *多く、そうですか? –
ところで、もしあなたが 'new_table'にインデックスを持っていれば、* every * insertの後に再構築されます。これには時間がかかります。答えのために –