MySQLデータベースでSQLAlchemyを使用していて、テーブルの行をカウントしたいと思います(約300k)。SQLAlchemy count関数の実行には、MySQLで直接同じクエリを作成する場合の約50倍の時間がかかります。私は何か間違ったことをしていますか?
# this takes over 3 seconds to return
session.query(Segment).count()
でも:
SELECT COUNT(*) FROM segments;
+----------+
| COUNT(*) |
+----------+
| 281992 |
+----------+
1 row in set (0.07 sec)
速度の違いは、テーブルのサイズとともに大きくなります(100k行ではほとんど目立たなくなります)。
アップデート
session.query(Segment.id).count()
の代わりに使用するsession.query(Segment).count()
と、トリックが実行され、速度が上がるようです。しかし、なぜ最初のクエリが遅いのか、私はまだ戸惑っています。