web2py上的原始SQL查询非常慢

时间:2014-09-03 12:33:05

标签: python mysql performance web2py

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) */

0 个答案:

没有答案