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