0

ウェブサイトに問題があります: 1 ページの訪問時間が長すぎます。そのページに *n マトリックスがあることがわかりました。マトリックスの各項目について、MYSQL データベースから 3 つのテーブルをクエリします。そのマトリックスのすべての項目は、同様にクエリを静かに実行します。

だから、大量の MYSQL クエリが問題を引き起こしているのではないでしょうか。そして、私はそれを修正しようとします。これが私が以下にリストする私の混乱の1つです:

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

SQL開発にはMySQLWorkbenchを使用しています。それは応答時間を与え、あなたに許可を与えられたMySQLサーバーにリモートで接続することができます(この場合、より正確な読み取りを提供します)。

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

また、お気づきのとおり、forループにSQLステートメントがあるようです。それはパフォーマンスに劇的な影響を与える可能性があります。そのデータを取得する際には、別のルートを使用する必要があります。

于 2012-08-17T04:18:15.507 に答える