このスキームでは
id uid content
1 1 A
2 1 B
3 1 C
4 1 D
5 1 E
ユーザーがid = 3, 4, 5
の行が不要であると判断した場合、content
をNULL
に設定するか、行を削除する方が良いですか?
このプロセスは何度も発生し、彼はおそらくNULL
スロットを再び使用します。将来的に変更する場合に備えて、UPDATE
を引き続き使用し、NULL
に設定しますか?または単に行全体をDELETE
しますか?
問題は次のようなものです。
DELETE
行? INSERT
| -> DELETE
-> INSERT
.. DELETE
-> INSERT
または
UPDATE
行? INSERT
| -> UPDATE to NULL
-> UPDATE to value
.. UPDATE to NULL
-> UPDATE to value
行が頻繁に再利用される場合は、値をNULL
に設定するか、列is_deleted
を追加して、行がソフト削除されたことを示すことをお勧めします。行を継続的に削除および挿入すると、テーブルが大幅に断片化され、パフォーマンスの低下の原因となる可能性があります。これは通常、キュー内に既知の数のスロット(行)があり、それらのスロットが事前に割り当てられているキューに使用されます。
行が再利用されない場合、または非常にまれに再利用される場合は、それらの行によって使用されているスペースの割り当てを解除することをお勧めします。
MaxVernonの答え(頭に釘を打つ、+ 1 !!!) に加えて、廃棄済みテーブルを使用して、どの行をソフト削除できるかを監視することもできます。 Mar 05, 2012
からの投稿を参照してください トゥームストーンテーブルとデータベースの同期および一時削除シナリオでの削除済みフラグ 。
どちらに住むことができるか検討してください
DELETE
を完全に使用すると、行が削除され、スペースが利用可能になります。 DELETE
コマンドは、InnoDB配管(ロック、ロールバックセグメントなど)を経由する必要があります。結局のところ、DELETE
は最も単純で心配のない(または少なくとも最も予測可能な)アプローチです。