目前遇到有幾十萬個停用的物料,但是有各式各樣的關聯單據
想刪掉他們挪到其他備用機上面
想這樣做原因是,現在非停用的才9千多個物料,但停用的達到四十萬多個
去查詢 SQL Server Log 紀錄因為這個嚴重影響查詢速度
本身數據幾十萬其實不大,但關鍵此ERP常使用 out join
物料表查詢,導致關聯數據變成四十幾 * 幾萬...
所以查詢速度就很慢了
員工反應跟之前比起,以前2秒能查完的速度,變成要等1分鐘
資料庫是 SQL Server 2012
已經累積太多了。建議你最好找專業的資料管理來幫你處理。
刪除大量的資料是很危險的事。如果還有關聯的話更是可怕。
在不確是是否有清除工具的情況下。
我倒是不建議你自已搞就是了。
補充一點,我以前曾經用過的招式。
不是用刪除,而是用新增。
畢竟如你說的,刪除要40萬,但保留9000。
但一次要刪除大量的資料也很可怕的。
所以當時用的招是另建一個新表。將要保留的資料給新增過來。
然後更名一下試試。
要做以上動作,最好能有一台測試的機器上試。
不要直接線上試。很危險。
有原作者的結轉或清除記錄工具嗎?這個問題需要通靈能力的人才有辦法解決了
ERP好難
我是有遇見過粗暴的開發者....
SELECT * FROM ViewA
LEFT JOIN ViewB on ViewB.id=ViewA.Masterid
幾百筆都不太會慢,但只要上萬筆資料,慢到吐血,再怎麼粗暴,也不要直接VIEW JOIN VIEW,資源開銷都被這樣的動作給吃光光,如果你的ERP系統有這樣的設計思維,除非你有辦法拿到原始碼並懂得如何修改及發布出去,否則....
請找原設計來修改,如果他願意且不會漫天要價的話
給錢他們也改不了..
幾十萬筆,資料量很小
可以先針對查詢速度慢的項目,先作sql的調整,或是table效能的調校
之後有時間,再去調整其他的sql
另外一種常用的解法,分割、封存資料庫,以年份為單位將相關的資料另外分割出來,停用的物料就用停用的日期做區分,因為你停用了,後面就不會有出單了。日後想要去查詢相關資料的話在另外掛起來或者再開一個查詢用的介面之類的去查。
針對提問中所提到的停用物料比現行使用物料還多,先不論是否為物料編碼原則的適當性所導致,首先ERP的停用物料位於物料主檔中存在的意義為此物料禁止入庫(包含相關入庫請採購單據都將受限使用),但還是可以出庫(包含出庫相關單據不再此限),以及該年度每月月結作業時都會使用到停用物料料號進行成本滾算,所以如果要將多年來停用的物料分割,搬遷到歷史table中存放,則基本篩選條件為停用物料不屬於當年度的庫存物料,如果停用物料從建立到停用無任何入出庫作業單據產生,則可以歸類在報廢區(或是直接清除,必須考量貴司內稽內控制度)。
以上分享個人對於ERP停用物料的管理原則,但如果自己無法對公司ERP系統有充分理解與掌控,建議還是編一些預算請原廠顧問來協助處理才是上策。
由料號能有幾十萬筆的規模來推測,貴司應該也是業界佼佼者廠商。
建個資料倉儲來用用,應該不過份才對!
找協力廠商,讓專業的人來執行,你才不會孤軍奮戰、自負盈虧。
SORRY!没提供什麼專業意見,但這是職場經驗談,也請你務必參考一下...