2011-02-23 81 views
1

我有一個問題涉及到一個很大的MySQL數據庫的一般方法。我做了一些php代碼來與數據庫交互。我試圖分析一組龐大的數據(~13萬行,200列),並且一直在用不同的方法來做這件事。我一直在學習很多東西,而且我覺得我很快就能將它設置爲真的,但我仍然有點卡住。處理大型MySQL數據庫組織的最佳方式?

我從堅定的'excel'思維開始。我不斷地向數據集中添加越來越多的列,因爲我試圖爲了統計分析的目的而選擇各種各樣的數據。我所做的一些php/mysql腳本花費了數小時。

然後,至少基本工作,我瞭解到了連接。這是我猜想的一點啓示,但也導致我重寫所有內容,以便加入我的數據。最終的結果是性能大幅增加 - 現在需要幾個小時才花了大約15秒。

與幾個人聊天后,我得出的結論,我仍然可以使其更快。我建立的方式是,不同的數據樣本都包含在不同的表中。每個表格都有一個數據彙總在另一個表格中,該表格用作聯接的一部分 - 有關該特定數據集的一般信息存儲在該輔助表格中,以便於訪問並提高速度。現在

,我這裏的問題是這樣的:這將是我最好的方式來改變我的數據庫和應用工作,使數據的所有這些不同的樣本組合成一個單一的,大表?我一直在嘗試這一點,但它似乎並沒有比我現在使用的方法更快。

換句話說,現在我正在執行涉及多表連接的大量「小」查詢,而不是涉及多表連接的單個巨大查詢,是否更好?我一直在檢查查詢的執行時間,看起來連接正在導致這種新方法的放緩。

我的印象是,從PHP重複發送小型查詢到MySQL並不像發送單個查詢那麼優化,但是對於更復雜的查詢,如果不是這種情況,是否有一個轉折點?我是否已經達到了這一點?

+1

那麼它取決於你使用的存儲引擎以及你如何索引表。等式有兩個方面:1.您使用的實際模式和2.您發佈的每個查詢。兩者都可以優化。 – prodigitalson 2011-02-23 23:37:45

+0

好吧,這是很好的知道。這些不同的數據樣本的主要問題是,沒有簡單的方法來標準化它們,因爲它們中的每一行都是完全獨特的。目前,它們使用唯一的行ID(主鍵)和一組3-4個索引列進行索引,這些索引列定期用作SELECT查詢的一部分。但是,即使目前的更新似乎也需要很長時間 - 對於更大的表,使用SELECT INTO來提高速度會更好嗎? – vize 2011-02-23 23:53:32

回答

1

做查詢優化是不是走出DB性能最好的方式。格式正確的SQL查詢和MySQL的內置查詢優化器可能會更好地完成這項工作。 (例如,在MySQL查詢優化器可以做的事情一樣http://en.wikipedia.org/wiki/Block_nested_loop

但真正的答案取決於你想做什麼。如果速度是首要任務,請列出您要查詢的內容和數據模式。答案通常涉及添加/刪除索引並調整您的查詢。

如果維持數據庫佔用小是你的目標(我很懷疑給出的磁盤空間怎麼便宜),一切恢復正常。

+0

好吧,這是偉大的知道 - 這是一個有點凌亂的時刻,但總的來講,是它的最好的,以確保參加對索引列與其他索引的列(S)的情況下? – vize 2011-02-24 00:35:53

+1

在您只對數據子集感興趣的大型表格中,這通常是一種很好的做法。但這一切都依賴(對不起,這是無益的)。數據庫優化就像一個國際象棋遊戲。例如,在列上保留索引不是免費的。插入將花費更長的時間來執行。鎖定可能會發生,等等。但在另一方面有時值得付出這樣的代價。 – Saurav 2011-02-24 00:44:52

1

如果你的連接查詢完成/索引正確,我想他們會更好地使用。在PHP

+0

啊,我想到了 - 更多的是,我不知道該做什麼比其他任何事情! – vize 2011-02-24 00:27:29

相關問題