0

我们的网站有一个问题:一个页面的访问时间太长。我们发现它在那个页面中有一个*n 矩阵;并且对于矩阵中的每个项目,它从 MYSQL 数据库中查询三个表。该矩阵中的每个项目都以同样的方式进行查询。

所以我想知道也许是大量的 MYSQL 查询导致了这个问题。我想尝试修复它。这是我在下面列出的困惑之一:

1.

m = store.execute('SELECT X FROM TABLE1 WHERE I=1')
result = store.execute('SELECT Y FROM TABLE2 WHERE X in m')

2.

r = store.execute('SELECT X, Y FROM TABLE2');
result = []
for each in r:
    i = store.execute('SELECT I FROM TABLE1 WHERE X=%s', each[0])
    if i[0][0]=1:
        result.append(each)

它在 TABLE1 中有大约 200 个项目,在 TABLE2 中有超过 400 个项目。我不知道女巫部分花费的时间最多,所以我无法更好地决定如何编写我的 sql 语句。

我怎么知道在 MYSQL 中做一些操作需要多少时间?谢谢!

4

2 回答 2

1

而不是安装一堆特殊的工具,你可以采取这样一种非常简单的方法(请原谅我的 Ruby):

start = Time.new
# DB query here
puts "Query XYZ took #{Time.now - start} sec"

希望你能把它翻译成 Python。或者......再次原谅我的Ruby......

QUERY_TIMES = {}
def query(sql)
  start = Time.new
  connection.execute(sql)
  elapsed = Time.new - start
  QUERY_TIMES[sql] ||= []
  QUERY_TIMES[sql] << elapsed
end

然后通过此自定义方法运行所有查询。进行测试运行后,您可以让它打印出每个查询运行的次数,以及平均/总执行时间。

对于未来,计划花一些时间学习“分析器”(如果你还没有的话)。为您选择的平台买一个好的,花一点时间学习如何使用它。

于 2012-08-17T04:29:16.730 回答
0

我使用 MySQL Workbench 进行 SQL 开发。它提供响应时间,并且可以远程连接到授予您权限的 MySQL 服务器(在这种情况下,这将为您提供更准确的读数)。

http://www.mysql.com/products/workbench/

此外,正如您所意识到的,您似乎在 for 循环中有一条 SQL 语句。这可能会极大地影响性能。您需要采用不同的方式来检索该数据。

于 2012-08-17T04:18:15.507 回答