Python Sqlalchemy执行时间和解释查询的执行时间之间的差异?

Python Sqlalchemy执行时间和解释查询的执行时间之间的差异?,python,postgresql,flask,sqlalchemy,explain,Python,Postgresql,Flask,Sqlalchemy,Explain,我将postgresql与Flask和sqlalchemy一起使用。 我发现如果我在python中做一些类似的事情 t1 = datetime.datetime.now() session.query(Table_Class).all() t2 = datetime.datetime.now() print (t2 - t1) 我正在获取sqlalchemy查询的执行时间。 但若我去postgresql并用EXPLAIN Analysis编写相同的sql语句,那个么我也可以得到sql查询的执行

我将postgresql与Flask和sqlalchemy一起使用。 我发现如果我在python中做一些类似的事情

t1 = datetime.datetime.now()
session.query(Table_Class).all()
t2 = datetime.datetime.now()
print (t2 - t1)
我正在获取sqlalchemy查询的执行时间。 但若我去postgresql并用EXPLAIN Analysis编写相同的sql语句,那个么我也可以得到sql查询的执行时间。像

EXPLAIN ANALYSE select * from table;

我发现这些执行时间之间的差异很大。sqlalchemy的执行时间几乎是EXPLAIN查询的执行时间的10倍。对于小查询,两个时间是(75ms和2ms),对于具有多个连接的长查询,时间是(1.5s和200ms)。我不知道为什么会这样。为什么这些时间会有很大的差异?

这种差异可能是由通信开销造成的。运行explain Analysis时,您正在测量postgres数据库中查询的准确时间。在python代码中测量时间时,就是测量查询执行的时间加上:连接到数据库、发送数据、接收/解析结果的时间,等等。根据传输的数据量和数据库的物理位置,与查询的实际执行时间相比,您可以预期通信开销会很大。

您确定SQLAlchemy会在您键入postgres console时生成相同的查询吗。例如,如果您有急切的加载,
session.query(TableClass)
也将执行连接,并将从连接b连接c生成
select*。
Yes SQLAlchemy生成与我在postgres控制台中键入的相同的结果。我通过设置
SQLALCHEMY\u ECHO=True
确认了这一点。是的,我同意会有开销时间,但我不希望以秒为单位。在我的例子中,对于具有长连接的大型查询,时间超过1秒。@Rohanil您正在从数据库检索多少行?数据库是否在另一台服务器上?您正在使用连接池吗?我正在从数据库中检索大约1000行,数据库位于同一台服务器上。对于1000行的小查询,时间是(75ms和2ms),对于返回1000行但有多个连接的大查询,时间是(1.5秒和200ms)。如果只有1000行且位于同一台服务器上,则确实不会有那么多开销。也许调试的方法是从只返回1个元素的非常简单的查询开始,或者甚至是一个简单的
SELECT 1用python进行的查询,查看是什么原因导致issoe@Rohanil“对于1000行的小查询,时间是(75ms和2ms),对于返回1000行的大查询,“具有相同行数的小查询和大查询?”?