一、為什么MySQL不建議使用delete刪除數據
因為只能整表刪除。所以,這其實是一個數據庫設計層面如何考慮數據維護的問題,數據庫設計層面,應該按照業務的邏輯去分表(比如按時間),在一段時間數據“失效”(業務不再需要查詢)后,備份后再drop或者truncate。而不是每隔固定一段時間,就去delete一次數據。
這是對于大表的情況。
當然,對于部分小表,比如配置表之類的,不建議用delete刪除數據,其實就是不建議刪除數據。數據庫設計時考慮“狀態”,每次都是更新狀態,而不是刪除。這種好處是:數據一直會留下痕跡,當出現問題的時候,會方便查找問題。壞處是:查詢會慢,浪費存儲空間(其實小表可以無視)。
性能問題:DELETE操作會實際刪除記錄并釋放存儲空間,這可能導致大量的磁盤碎片。在大量數據刪除的情況下,此過程可能會耗費大量時間和計算資源。
審計和數據恢復:使用DELETE語句刪除數據后,數據將永久丟失,除非你有有效的數據備份。這可能導致難以恢復的數據丟失。同時,對于審計和跟蹤數據更改的需求來說,DELETE操作可能不是優異選擇。
鎖問題:在刪除數據時,MySQL會對涉及的行和表加鎖,以確保數據一致性。在高并發環境下,DELETE操作可能導致鎖爭用,進而降低系統性能。
延伸閱讀:
二、MongoDB是什么
非關系型數據庫(nosql ),屬于文檔型數據庫。MongoDB采用類JSON的documents來存儲數據。數據結構由鍵值(key=>value)對組成。
MongoDB采用動態數據模型schema,這意味著不需要預先定義表的數據類型和字段名。當MongoDB需要更新文檔documents的時候,可以輕松增加新的字段名或者刪除舊的字段。MongoDB讓數據結構更加層級化,因而存儲數組等復雜數據結構。 在同一個集合collection中,文檔document對字段也沒有強約束,因此更容易設計差異化的數據結構。