2010-06-05 118 views
1

我組建了一個網頁,這是在數據庫訪問方面相當「昂貴」。我不想在這個階段開始優化 - 儘管在嘗試達到最終期限時,我可能最終沒有進行優化。網頁數據庫查詢優化

目前的頁面需要18個(這是正確的爲18個)命中的分貝。我已經在使用連接,並且有些查詢是UNIONed來最小化到db的行程。我的本地開發機器可以處理這個(頁面不是很慢),但是我覺得如果我把這個發佈到野外,查詢的數量將很快壓倒我的數據庫(MySQL)。

我總是可以使用memcache或類似的東西,但我寧願繼續我的其他開發工作,需要在截止日期之前完成 - 至少要檢索頁面的作品 - 它現在只是一個優化問題(如果需要)。

因此,我的問題是 - 單個頁面檢索的18分貝查詢完全離譜 - (即我應該把所有東西都擱置並優化檢索邏輯的地獄),還是應該照常繼續下去,按計劃發佈並查看會發生什麼?

[編輯]

只是爲了澄清,我已經做了「明顯的」之類的使用(單一和複合)指標在查詢中使用的字段。我還沒有做的是運行一個查詢分析器來查看我的索引等是否最優。

+0

這些東西不是「顯而易見」的。沒有查詢分析它只是盲目拍攝。同樣的事情也會影響你的表現問題:沒有分析結果,它只是空話。性能無法使用某些配方或幻數進行優化。這是一個*過程*。一件事情要做。 – 2010-06-05 17:32:22

回答

0

18分貝查詢可能是有點大材小用的,除非它是某種複雜的門戶網站;雖然不知道100%是什麼頁面和服務器後端代碼,但很難判斷。

額外查詢的主要成本通常是建立它的數據庫連接,以及查詢往返的成本。對於前者,請確保您的後端支持數據庫連接的共享池(我假設您使用PHP,所以我沒有任何實際的建議,但Java和Perl都有實現這一點的方法)。當然要確保一個頁面加載重用整個頁面的相同數據庫連接。

對於後者(少查詢),考慮:

  • 捆綁所有的查詢與多個結果一個大的查詢集

  • 德正常化通過JOIN和UNION喜歡你的結果集你已經做

另外,還要考慮有你的web應用和DB(內存緩存,或者緩存數據的應用程序服務器)之間的中間層。

但是,我必須說,實際上,我建議不要做任何以上的,直到你對測試服務器督促和基準測試應用程序,並找到使用基準和分析的慢了點。

更新:要回答在評論懷疑論者,這裏的一對連接的成本一些信息,具體相關OT mysql的

http://mysql-dox.net/Sams-MySQL.Database.Design.and/0672327651/ch14lev1sec3.htmlGoogle cache

+0

你確定這些「連接」,你稱它,真的影響任何東西? – 2010-06-05 12:52:40

+0

@Col。查看我的更新 – DVK 2010-06-05 13:22:55

+1

OP僅打開一個連接 – 2010-06-05 13:32:34

0

你的做法是完全錯誤的。
還有就是注意在這些「旅行的分貝」不好。

和你attemts,以儘量減少查詢號碼不惜任何代價,可能會導致你慢查詢和性能災難

+1

完全錯誤?確保你儘可能少地訪問數據庫沒什麼問題嗎?我同意,「不惜一切代價」這樣做是一個壞主意,但我不會說他的做法是完全錯誤的...... – 2010-06-16 17:12:47

+0

@Abe試圖優化*數量的查詢而不是*質量*是錯誤的方法。嘗試優化任何內容而不分析結果是錯誤的方法。這就是爲什麼它被稱爲「完全錯誤」。曾經聽過一個詞* profiling *,呃? – 2010-06-16 23:19:34

+1

當您嘗試調整應用程序/數據庫時,應該考慮性能的所有方面。包括在頁面加載時觸發的查詢數量以及您所做的任何分析。 – 2010-06-19 19:19:33

0

你檢索多個頁面相同的信息在所有?如果你是可能的話,可以逐頁傳遞這些信息,而不是每次查詢數據庫。

例如,假設你在每個頁面的頂部顯示一個用戶名(比如SO)。將信息從頁面傳遞到頁面可能更有意義,而不是每次都查詢數據庫。我知道一個明顯的例子,但我希望它能證明我想說的。

0

18個查詢不是問題,只要它們快速高效。

但是,如果您覺得太多了,也許您應該查看較大的圖片並確定該網頁是否嘗試做太多。