私はMySQLにアクセスするためにmysql.connector(MySQLdb Pythonの実装?)を使用します。カーソルからのselect文からの転送はそれほど高速ではありません。高速Python MySQL
コードをスピードアップする方法はありますか?
別のライブラリですか?どちら? (私はWindowsとPython 3.1を持っています) カーソルによる繰り返しとは異なる行検索があるかもしれませんか?
私はMySQLにアクセスするためにmysql.connector(MySQLdb Pythonの実装?)を使用します。カーソルからのselect文からの転送はそれほど高速ではありません。高速Python MySQL
コードをスピードアップする方法はありますか?
別のライブラリですか?どちら? (私はWindowsとPython 3.1を持っています) カーソルによる繰り返しとは異なる行検索があるかもしれませんか?
デフォルトのMySQLdb
カーソルは、クエリ結果全体をサーバから一度に取得します。このデータをPythonのタプルリストに変換すると、多くのメモリと時間が消費される可能性があります。
巨大なクエリを作成し、 の結果をサーバーから1つずつ取り出す場合は、MySQLdb.cursors.SSCursorを使用します。ただし、SSCursorを使用する場合、connection
のno other query can be madeは、結果セット全体がフェッチされるまで保持されます。
import MySQLdb
import MySQLdb.cursors as cursors
connection = MySQLdb.connect(
...
cursorclass = cursors.SSCursor)
cursor = connection.cursor()
cursor.execute(query)
for row in cursor:
...
あるいは、oursql、MySQLのための代替のPythonドライバを使用します。 oursqlの機能の1つは、fetchs rows lazilyです。
ありがとう!興味深いヒント:)私はこれらの可能性を検討しようとします。 – Gerenuk
executemanyのヒントはとても役に立ちました。さらに、fetchallはカーソルアクセスよりもかなり速いことに気付きました!私がまだ理解していないSSCursorのことですが、それを心に留めておきます:) – Gerenuk
@unutbu mysqlはサーバ側のクエリをサポートしていますか?私はmysqlがすぐにレコードを取得するとレコードを1つずつ送ります。データをキャッシュしません。さもなければ、誰かがmysqlサーバを殺すには、大きなテーブルSSCursorを送信するだけで、mysqlサーバのメモリがなくなります。 –
なぜあなたはそれがクライアントライブラリであり、物事が遅くなるクエリではないと思いますか?それに加えて、いくつかのコードを表示します。 – ThiefMaster
SQLブラウザーで同じクエリを起動する方がはるかに高速です。コードは広がっていますが、時間がかかりません。 SQLアクセスはできないがPythonコードにあれば、自分でそれを試してみよう。それはここでの質問ではありません。 – Gerenuk