从EXPLAIN查询中Sqlalchemy执行时间和执行时间之间的差异?

时间:2016-06-29 10:46:36

标签: python postgresql flask sqlalchemy explain

我正在使用带有Flask和sqlalchemy的postgresql。 我发现如果我在python中执行某些操作,

t1 = datetime.datetime.now()
session.query(Table_Class).all()
t2 = datetime.datetime.now()
print (t2 - t1)

我正在获得sqlalchemy查询的执行时间。 但是,如果我去postgresql并使用EXPLAIN ANALYZE编写相同的sql语句,那么我也可以获得sql查询的执行时间。像,

EXPLAIN ANALYSE select * from table;

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

1 个答案:

答案 0 :(得分:0)

差异可能是由于通信开销造成的。当您运行explain analyze时,您正在测量postgres数据库中查询的确切时间。当你在python代码中测量时间时,你正在测量查询执行的时间加上:连接数据库,发送数据,接收/解析结果等的时间。取决于传输的数据量和物理量与查询的实际执行时间相比,数据库的位置可能会带来显着的通信开销。