iT邦幫忙

0

mysql 資料表的資料管理建議?

想請問各位是否可以給個建議?
我有寫個訂單系統
有三種資料表A B C是儲存這些訂單的資料
三個資料表中都有個欄位S是訂單狀態 已送出 出貨中 已出貨 已結束 已刪除
只是我現在的作法是
當用戶提交訂單後會到A去 訂單狀態是已送出(出貨中跟已出貨也會在A)
當訂單狀態是"已結束"時則會到B去
當訂單被已刪除則會到C去

我當初這樣做是怕單單一張資料表塞那麼多筆數是否會有問題? 因為累積下來會有上萬筆資料
所以我就增了其他2張保存已結束和已刪除.....
只是缺點是維護很麻煩 包括新增/編輯欄位 同樣動作要做三次!!
這樣做好嗎???

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 4 級 ‧ 2016-10-10 17:57:20 檢舉
才上萬筆..你也太小看資料庫了
記得有人實驗過用 MyISAM 的儲存格式可以到 億萬筆
但是實際操作下,大約 10 萬筆就會進行資料表切割,
某些MYSQL 的資料庫設計師甚至會利用年度過帳時,直接切割資料表,或是直接產生新的資料庫
這種作法不只在 MYSQL 看的到,在 MSSQL 或其他的大型資料庫都看的到
當然這只是建議,樓主不一定要這麼做,但效能上,在筆數過多的資料表進行查詢的確速度會相當緩慢的
如果我是樓主,我的規劃會是 訂單只有一個資料表,訂單狀態會是另外一個資料表
當我查詢訂單狀態時,才去帶出訂單資料,這樣的查詢速度會比較快
訂單狀態有幾個欄位,索引號 訂單單號 訂單狀態 狀態日期 建立日期
訂單實際上可以拆成好幾個表,這個叫做正規化,只要不要太過度,實際上可以節省很多的效能的
火爆浪子 iT邦研究生 1 級 ‧ 2016-10-11 10:12:15 檢舉
看來到一定筆數還是得切割?
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
做工仔人!
iT邦大師 1 級 ‧ 2016-10-10 20:39:40
最佳解答

樓主的問題建議使用" Triggers"的方式處理.
可參考如何使用MS SQL的Stored Procedure與Trigger

這篇寫的比較清楚.
MySQL 超新手入門(16)Triggers

1
海綿寶寶
iT邦大神 1 級 ‧ 2016-10-10 23:12:44

1.不好
2.不必擔心單一資料表資料筆數過多的問題

火爆浪子 iT邦研究生 1 級 ‧ 2016-10-11 10:12:06 檢舉

所以到一定筆數mysql也會開始變緩慢嗎

這麼說好了
「筆數」不會是 mysql 變緩慢的主因
至少我從來沒聽過/看過這種情形

打個比方
妳買了個 10TB 的硬碟
妳會考慮「檔案數量過多而影響硬碟效能」的問題嗎?

我要發表回答

立即登入回答