mysql為什么不建議delete數據?


delete對性能會有影響,一般不建議硬性delete數據,而是標記deleted = 1這種軟刪除

為啥呢?

 

根據之前了解的mysql底層存儲原理

最小存儲單元page頁,無論是非葉子節點page存的是索引key和指針,還是葉子節點存的是行數據

 

1.當刪除大量數據時

MySQL內部不會真正刪除空間,而且做標記刪除,即將delflag:N修改為delflag:Y,commit之后會會被purge進入刪除鏈表,

如果下一次insert更大的記錄,delete之后的空間不會被重用,如果插入的記錄小於等於delete的記錄空會被重用

 

2.當少量刪除中間數據時

你在中間刪了某些個值,實際上只是找到那個page頁找到對應的數據做刪除標記,並不會實際影響page頁已經占的大小,這塊空間可能也永遠不會被利用,產生了內存碎片

導致索引頻繁分裂,影響SQL執行計划的穩定性

 

 

正確姿勢:

使用deleted = 1 字段來軟刪除,保證索引連續性,

必要時,可將deleted = 0的字段完整遷移到新表,解決碎片問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM