Bien! Comme tout le monde l'a dit, cela dépend de la situation.
Si vous avez un index sur une colonne comme UserName ou EmailID - et que vous ne vous attendez jamais à ce que le même UserName ou EmailID soit utilisé à nouveau; vous pouvez opter pour une suppression logicielle.
Cela dit, vérifiez toujours si votre opération SELECT utilise la clé primaire. Si votre instruction SELECT utilise une clé primaire, l'ajout d'un indicateur avec la clause WHERE ne ferait pas beaucoup de différence. Prenons un exemple (Pseudo):
Utilisateurs de la table (UserID [clé primaire], EmailID, IsDeleted)
SELECT * FROM Users where UserID = 123456 and IsDeleted = 0
Cette requête ne fera aucune différence en termes de performances car la colonne UserID a une clé primaire. Initialement, il analysera la table en fonction de PK, puis exécutera la condition suivante.
Cas où les suppressions logicielles ne peuvent pas du tout fonctionner:
Inscrivez-vous sur la plupart des sites Web utilisent EmailID comme votre identification unique. Nous savons très bien qu'une fois qu'un EmailID est utilisé sur un site Web comme Facebook, G +, il ne peut être utilisé par personne d'autre.
Il arrive un jour où l'utilisateur souhaite supprimer son profil du site Web. Maintenant, si vous effectuez une suppression logique, cet utilisateur ne pourra plus jamais s'inscrire. De plus, vous réinscrire en utilisant le même EmailID ne signifierait pas restaurer l'intégralité de l'historique. Tout le monde le sait, la suppression signifie la suppression. Dans de tels scénarios, nous devons effectuer une suppression physique. Mais afin de conserver l'historique complet du compte, nous devons toujours archiver ces enregistrements dans des tables d'archive ou des tables supprimées.
Oui, dans les situations où nous avons beaucoup de tables étrangères, la manipulation est assez lourde.
Gardez également à l'esprit que les suppressions logiques / logiques augmenteront la taille de votre table, donc la taille de l'index.