Re: [問題] PHP存取MySQL最浪費時間的地方在?

看板Web_Design作者 (缺錢啦 @@)時間20年前 (2006/02/09 04:24), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/7 (看更多)
※ 引述《grassboy2 (活力花俏草兒Grassboy大렩》之銘言: : 嗯嗯…下面的動作哪個比較傷主機資源啊? : 狀況A : PHP在連進資料庫(資料庫裡面只有3份資料表)後… : 執行select指令 : 從其中一個資料表裡面的 : 100000多筆資料挑一筆資料出來的時間 可以用 explain 了解資料庫是如何執行 query 的。 (至少 mysql 可以 XD) 前面也有版友說了,適當的設定 Primary, Index 等 key 將有益於搜尋速度。 : 狀況B : PHP連進資料庫後(資料庫裡面有10000份資料表)… : 執行select指令 : 從其中一個資料表裡面的 : 100筆資料挑一筆資料出來的時間… 以 MySQL 來說,每個 table 是存於獨立的檔案之中, 因此資料表的個數,對搜尋速度不會有太大影響。 然而一個 table 在 MySQL 裡, 以 MyISAM 會佔用三個檔案 (*.MYD, *.MYI, *.frm) 所以... 可能會因為檔案數變多,而造成新的問題。 : 又…瞬間負擔和長時間負擔有差別嗎? : 話說小弟目前有個資料庫就是狀況A的狀況… : 想說趁寒假改寫整個資料庫^^~但又擔心作白工^^" 我個人建議將資料分開儲存,使得單一 table 內的資料筆數, 能夠在可預見的未來內,維持一合理且容易操作維護的大小。 資料庫的正規化是種在設計時就應考量的作法, 將高存取率的資料抽離,存在單一 table 中,也許能使你從某些快取因素獲利。 回到如何分割資料的情況來看,若是在你最常 select 的 table 中 (最常見應該是使用者的帳號密碼對照表) 有一種足夠混亂,但又夠穩定的資料 那麼透過 hash function 產生 key, 再將資料分配至適當的 table 之中即可。 以一堆使用者來說,出生月份或身份證字號的某幾位數 (前兩位以外) 對文章來說,發表時間 timestamp 的末幾位數,都是很好的方向。 至於應分配到多少 bucket 當中,則視需要 (資料成長,以及大小) 而定。 (然而像你狀況 B 的 10k buckets, 似乎也太多囉) 如果你的資料庫建立得 "相當有水準" 使用者在登入時,只會被檢查 "ID / Password" 的這個表格 (而我們都知道, ID / Password 都不是很亂的資料) 那麼加上第三欄,指定其資料所在的表格名稱,那也是種可行的方式。 我最近有點懶,沒空去嘗試這些不同方法在主機上實測的結果, 所以希望這些空談能對你有所幫助了 ^^;; -- 鬼壓床怎麼辦 騎上去啊 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.217.134
文章代碼(AID): #13wbDXo- (Web_Design)
討論串 (同標題文章)
文章代碼(AID): #13wbDXo- (Web_Design)