作者wawawa (哇哇哇○( ̄﹏ ̄)○)
看板PHP
標題Re: [請益] MySQL執行效率一問
時間Fri Oct 14 18:55:20 2005
※ 引述《KennyL (Giant Heart)》之銘言:
: ※ 引述《wawawa (哇哇哇○( ̄﹏ ̄)○)》之銘言:
: : 若是有適當正規化,應該一個步驟就可以把資料提取出來。
: : 當然,請記得相關欄位加上索引,速度才會快。以下是小弟的建議:
: : 1.正規化,將作者那一欄抽出成一個獨立資料表
: 嗯嗯~誠如w大所說, 將資料取出並正規化的確是最好的方式.
: 但目前系統的設計, 是可以讓使用者在一個資料表的結構下自行upload資料,
: 再由系統去分析使用者在這一次上傳資料中的內容.
: 也就是說, 我只是提供一個殼, 讓user自己放資料進來.
: 所以獨立出來的資料表, 內容也還是會每次不同.
: 所以我的迷思就在這了, 同樣都是要重新insert資料, 也同樣都有建立欄位索引,
: 唯一的差別在於先建立資料表, 或是在程式裡執行新增資料表,
: 這兩種方式在效能上會不會有很大的差別呢?
效能上的差別,會隨著你的資料量的增加而拉大。
所以若是你的資料量很大、使用者存取又很頻繁,那真的要設法改善這一部分的效能,
否則存取的速度、系統負載應該都會有著相當的影響。
既然你說你是提供一個殼讓使用者輸入資料,
比如你設計了一個頁面,讓使用者可以在這個頁面一次把所有的資料輸入(書籍名稱、
作者等),那還不如改成這樣:
第一個頁面指出現書籍名稱、ISBN號碼...等單一資料的欄位讓使用者輸入,
輸入完畢後使用者按下一步;
第二個頁面讓使用者下拉選擇有幾位作者,搭配javascript動態產生作者數量的
文字輸入欄位。如此一來第二個頁面的資料(作者),就可以使用php去解析,存到
獨立的作者資料表。如此一來不也是可以達成你的"提供使用者輸入的殼"的需求?:)
當然,若是架構以然定型,不宜去更動的話,
那就設法使用我前面所提的第二種方法,這裡配合你的需求修改如下:
1.在啟動MySQL時,新增一個HEAP型態的資料表:
CREATE TABLE xxx (...) TYPE=HEAP;
2.每次排序完,資料以全部送到前端後,清空資料表:
TRUNCATE TABLE xxx;
省去建立暫存資料表以及刪除的動作,效能會比較理想。
不過這時可能就要注意一下系統分配給MySQL daemon的記憶體配置以及
相關議題。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.16.1.95