Re: [問題] PHP存取MySQL最浪費時間的地方在?
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 7 篇):
Web_Design 近期熱門文章
PTT數位生活區 即時熱門文章