2016-05-10 8 views
3

SQLalchemyを使用してSQLデータベースから多くのデータをクエリしようとしています。Python Sqlalchemy:効率的なクエリとForループ

some_data = db.session.query(some_info1, some_info2).all() 

for key in some_data: 
    # do something 

これは、forループのためのSQLクエリの約10秒から約0.2秒かかります。

私はジェネレータの方法も試しました。

some_data = db.session.query(some_info1, some_info2) 

generator = (x for x in attendee_profile) 

for key in generator: 
    # do something 

これは、SQLクエリで約0.04秒、forループで約10秒かかります。

これをより効率的に行う方法はありますか?私は特に、発電機を使用してループのための10秒について懐疑的です、私は、ジェネレータを使用しているこの遅い意味ですか?

私の目標は、合計時間(クエリ時間でもループ時間でもない)を減らすことです。

+0

私はmemcacheを使うことができると思います。 このリンクを参照してください:http://bbit.co.nz/blog/2014/07/13/faster-sqlalchemy-memcached/ – Murali

答えて

0

残念ながら、SQLクエリはどちらの場合も10秒かかります。最初の例では、query(someinfo1, someinfo2).all()が実際にクエリを実行しています。 .all()は、クエリの実行を強制します。

第2の例では、query(someinfo1, someinfo2)は実際にクエリを実行しません。それはクエリを構成するだけです。あなたが反復処理を開始するときは、クエリが実際に実行されるときです。

短いストーリーは、実行されている実際のSQLを最適化することに焦点を当てています。 EXPLAIN ANALYZEを使用して、インデックスを追加してください。問題はここのコードではありません。それはSQLと一緒です。

+0

ええ、私はこれについてもう1日分の研究をしましたが、特別なものは何も見つかりませんでした。 SQLの改善のヒント – seokhoonlee

関連する問題