Gut! Wie jeder sagte, kommt es auf die Situation an.
Wenn Sie einen Index für eine Spalte wie Benutzername oder E-Mail-ID haben und nie erwarten, dass derselbe Benutzername oder die gleiche E-Mail-ID erneut verwendet wird; Sie können mit einem weichen Löschen gehen.
Überprüfen Sie jedoch immer, ob Ihre SELECT-Operation den Primärschlüssel verwendet. Wenn Ihre SELECT-Anweisung einen Primärschlüssel verwendet, macht das Hinzufügen eines Flags mit der WHERE-Klausel keinen großen Unterschied. Nehmen wir ein Beispiel (Pseudo):
Tabellenbenutzer (UserID [Primärschlüssel], EmailID, IsDeleted)
SELECT * FROM Users where UserID = 123456 and IsDeleted = 0
Diese Abfrage hat keinen Einfluss auf die Leistung, da die UserID-Spalte einen Primärschlüssel enthält. Zunächst wird die Tabelle basierend auf PK gescannt und dann die nächste Bedingung ausgeführt.
Fälle, in denen weiche Löschvorgänge überhaupt nicht funktionieren:
Bei der Anmeldung auf fast allen Websites wird EmailID als eindeutige Identifikation verwendet. Wir wissen sehr gut, dass eine E-Mail-ID, die auf einer Website wie Facebook, G + verwendet wird, von niemand anderem verwendet werden kann.
Es kommt ein Tag, an dem der Benutzer sein Profil von der Website löschen möchte. Wenn Sie jetzt eine logische Löschung vornehmen, kann sich dieser Benutzer nie wieder registrieren. Eine erneute Registrierung mit derselben E-Mail-ID würde auch nicht bedeuten, den gesamten Verlauf wiederherzustellen. Jeder weiß, Löschen bedeutet Löschen. In solchen Szenarien müssen wir einen physischen Löschvorgang durchführen. Um jedoch den gesamten Verlauf des Kontos zu erhalten, sollten wir solche Datensätze immer entweder in Archivtabellen oder in gelöschten Tabellen archivieren.
Ja, in Situationen, in denen wir viele fremde Tabellen haben, ist die Handhabung ziemlich umständlich.
Beachten Sie auch, dass weiche / logische Löschvorgänge Ihre Tabellengröße und damit die Indexgröße erhöhen.