db.executesql()需要30秒才能返回结果,尽管如果我在MySQL控制台上尝试使用相同的查询需要0.5-1秒,或者在web2py上使用相同的代码调试控制台或web2py shell。
dbs._timings #From the first test below
[('SELECT 1;', 0.016000032424926758), #web2py or driver stuff, I didn't execute it.
('SET FOREIGN_KEY_CHECKS=1;', 0.003999948501586914), #web2py or driver stuff, I didn't execute it.
("SET sql_mode='NO_BACKSLASH_ESCAPES';", 0.00800013542175293), #web2py or driver stuff, I didn't execute it.
("SELECT TIMESTAMPDIFF(...) AS 'duration',\n
TIMESTAMPDIFF(...)\n
- INTERVAL 1 HOUR, TIMESTAMP(...)\n
+ INTERVAL CAST(...) AS 'timediff',\n
ris.ODATE as 'date',\n
CONCAT(...) as 'service'\n
FROM ... AS ris\n
JOIN ... as sd on ris.... = sd....\n
WHERE ris.... != '0000-00-00 00:00:00'\n
and ris.... != '0000-00-00 00:00:00'\n
and ris.... >= '2010-8-15'\n
and ris.... <= '2014-8-22'", 32.0460000038147), # Slow query/code, executed on page view.
("SELECT TIMESTAMPDIFF(...) AS 'duration',\n
TIMESTAMPDIFF(...)\n
- INTERVAL 1 HOUR, TIMESTAMP(...)\n
+ INTERVAL CAST(...) AS 'timediff',\n
ris.ODATE as 'date',\n
CONCAT(...) as 'service'\n
FROM ... AS ris\n
JOIN ... as sd on ris.... = sd....\n
WHERE ris.... != '0000-00-00 00:00:00'\n
and ris.... != '0000-00-00 00:00:00'\n
and ris.... >= '2010-8-15'\n
and ris.... <= '2014-8-22'", 0.6069998741149902) #Same query/code, exec. on the debug console]
我尝试了以下案例:
... #Irrelevant part of the code
raw_data = dbs.executesql(query, as_dict=True) #Takes 30 seconds to return a result
from gluon.debug import dbg
dbg.set_trace() #After this line, I'm on the debug console
raw_data = dbs.executesql(query, as_dict=True) #Takes <1 second to return a result
dbs._timings #print
和
... #Irrelevant part of the code
from gluon.debug import dbg
dbg.set_trace() #After this line, I'm on the debug console
raw_data = dbs.executesql(query, as_dict=True) #Takes <1 second to return a result
当我尝试连续执行更多查询时,事情变得很有趣:
... #Irrelevant part of the code
raw_data = dbs.executesql(query, as_dict=True) #Takes 7 seconds to return a result
raw_data = dbs.executesql(query, as_dict=True) #Takes 7 seconds to return a result
raw_data = dbs.executesql(query, as_dict=True) #Takes 7 seconds to return a result
from gluon.debug import dbg
dbg.set_trace() #After this line, I'm on the debug console
raw_data = dbs.executesql(query, as_dict=True) #Takes <1 second to return a result
关于HeidiSQL
/* Affected rows: 0 Found rows: 7,391 Warnings: 0 Duration for 1 query: 0.000 sec. (+ 0.078 sec. network) */