2010-09-08 84 views
2

是什麼使得檢索結果10對10進行單分貝的單一數據庫(MySQL的)調用的性能差異呼籲分別檢索這些結果?單數據庫調用VS多個數據庫調用性能

如果一個比其他更好的,是有辦法,我可以去檢驗兩者之間的性能? (我只是好奇,因爲如果我對性能的另一個問題以後,我可以用建議的方式來測試它自己)

回答

5

一個單一的通話將永遠比幾個電話爲同一數據的速度更快。簡單地說,網絡轉身和延遲本身就是一個組件,但是SQL處理的啓動和拆卸也會產生一些影響。

0

單次通話效果較好。您和DB之間的往返次數減少,涉及的處理較少。減少數據傳輸的記錄集(好吧,只有一點點)。

測試性能。你可以用編程的方式來測試它 - 你的客戶端應用程序可以在2之間寫入開始/停止時間,這很容易,並且顯示出與客戶端的性能差異。如果要查看服務器性能,可以啓用常規日誌(或二進制日誌)並查看每個查詢的性能。

1

什麼是重 - 10個蘋果或自行車嗎?
查詢不相同!。你不能用數字來比較它!
查詢必須是合理的。期。不可想象的更快,但明智。做這件事就是這個地方。這是選擇一個查詢而不是另一個的唯一原因。

我希望你的意思是不同的查詢,而不是所謂的10倍只是單一的查詢。
當然,應該避免多次運行相同的查詢,以及其他重複操作 - 這是基本的編程規則之一。

並回答你的未來業績的問題 -
瞭解剖析

BENCHMARK <query>EXPLAIN <query>是MySQL的分析和性能調整

0

您可以輕鬆地做到兩者之間的性能測試工具。你會做類似下面的僞代碼:

start = CurrentTime() 
do 1000 times 
    for i from 1 to 10 
    query_for_one_row(i) 
    end 
end 
end = CurrentTime() 
time_for_individual_queries = (end - start)/1000 

start = CurrentTime() 
do 1000 times 
    query_for_rows(1,10) 
end 
end = CurrentTime() 
time_for_bulk_queries = (end - start)/1000 

注意,我跑每一個一千倍,因爲通常在性能測試中,你測試的東西太快,除非你反覆運行它始終如一地觀察區別。當然,你會想要調整你的特定情況。

+0

mysql有'BENCHMARK'運算符 – 2010-09-08 21:23:16

+1

@Col。 Shrapnel沒有說明開放10個連接,準備和執行10個查詢的成本,或者客戶端需要發生的任何事情,或者從客戶端到服務器的交談。 'BENCHMARK'只測試查詢在服務器上的運行方式(也可能有用,但不包括我們感興趣的所有成本)。我提出了一種通用的方法來測試10個小查詢的全部成本與一個大查詢的成本。 – 2010-09-08 21:41:04

-1

舊線,我知道......以爲我會借給我的2美分反正:)

有一些不太可能的情況,其中多個呼叫可能是必要的......任何任何人,請糾正我,如果我錯了這裏。

我遇到了一種情況,我從數據庫中提取信息並編譯成一個簡單的CSV ...最後,有很多數據綁定到許多表,成員,訂單,訂單中的項目,產品,不同的產品版本等...從字面上看,運行單個查詢需要花費很長時間,您可以爭辯說,數據庫shema可能應該有點不同,但我解決這個問題的方式是運行數據的簡單查詢...然後運行單個查詢和flush()數據到前端。

雖然我同意99%的情況下1個查詢總是最好的,但有幾個不太可能的情況,其中多個可以有所幫助。