我正在使用MySQL數據庫SQLAlchemy,我想計算表中的行(大約300k)。 SQLAlchemy count函數的運行時間約爲直接在MySQL中編寫相同查詢的50倍。難道我做錯了什麼?爲什麼SQLAlchemy count()比原始查詢慢得多?
# 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()
似乎這樣的伎倆,並得到它加快速度。我仍然困惑爲什麼最初的查詢比較慢。
我不知道SQLAlchemy的事情,但它聽起來好像它會迭代結果而不是發送一個計數(*)到後端。 –
[docs](http://docs.sqlalchemy.org/ru/latest/orm/query.html#sqlalchemy.orm.query.Query.count)似乎表示,count函數只是發出一個count語句。 – mtth
當您創建'engine'時,使用'echo = True'參數啓用日誌記錄,以查看實際生成的SQL語句。 – van