2012-08-17 71 views
0

我們的網站出現問題:一頁的訪問時間過長。我們發現它在該頁面中有一個n * n矩陣;併爲矩陣中的每個項目查詢MYSQL數據庫中的三個表。該矩陣中的每個項目都會安靜地進行查詢。我怎麼知道需要多少時間來查詢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項和表2中更多的則400項。我不知道女巫部分需要多少時間,所以我不能更好地決定如何編寫我的sql語句。

我怎麼知道在MYSQL中做一些操作需要多少時間?謝謝!

+0

查找解釋(http://dev.mysql.com/doc/refman/5.0/en/explain.html)以查看正在進行的操作以及正在使用的索引(如果有)。 – 2012-08-17 04:32:27

+0

是否可以使用此處使用的語言對此進行標記?這個例子並不清楚。 – tadman 2012-08-17 05:50:14

回答

0

我使用MySQL Workbench進行SQL開發。它給出了響應時間,並且可以遠程連接到授予您許可的MySQL服務器(在這種情況下,會給您更準確的讀數)。

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

而且,你已經意識到這似乎你有一個SQL語句在for循環中。這可能會極大地影響性能。你會想要採取不同的路線檢索數據。

1

而不是安裝了一堆的專用工具,你可以採取這樣的死簡單的方法(原諒我的紅寶石):

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 

然後通過這個自定義方法運行所有的查詢。進行測試運行後,您可以打印出每個查詢運行的次數以及平均/總執行時間。

未來,計劃花一些時間瞭解「分析器」(如果您還沒有)。爲你所選擇的平臺獲得一個好的選擇,花一點時間學習如何使用它。

相關問題