Хорошо! Как все говорили, это зависит от ситуации.
Если у вас есть индекс для столбца, такого как UserName или EmailID, - и вы никогда не ожидаете, что это же имя пользователя или EmailID будет использоваться снова; Вы можете пойти с мягким удалением.
Тем не менее, всегда проверяйте, использует ли ваша операция SELECT первичный ключ. Если ваш оператор SELECT использует первичный ключ, добавление флага с предложением WHERE не будет иметь большого значения. Давайте возьмем пример (псевдо):
Таблица пользователей (UserID [первичный ключ], EmailID, IsDeleted)
SELECT * FROM Users where UserID = 123456 and IsDeleted = 0
Этот запрос не повлияет на производительность, поскольку столбец UserID имеет первичный ключ. Сначала он просканирует таблицу на основе PK, а затем выполнит следующее условие.
Случаи, когда мягкое удаление не может работать вообще:
При регистрации на большинстве веб-сайтов EmailID используется в качестве уникального идентификатора. Мы очень хорошо знаем, как только EmailID используется на веб-сайте, таком как Facebook, G +, он не может быть использован кем-либо еще.
Наступает день, когда пользователь хочет удалить свой профиль с сайта. Теперь, если вы сделаете логическое удаление, этот пользователь больше не сможет зарегистрироваться. Кроме того, повторная регистрация с использованием того же EmailID не будет означать восстановление всей истории. Все знают, удаление означает удаление. В таких сценариях мы должны сделать физическое удаление. Но чтобы сохранить всю историю учетной записи, мы всегда должны архивировать такие записи либо в архивных таблицах, либо в удаленных таблицах.
Да, в ситуациях, когда у нас много сторонних таблиц, обработка довольно громоздка.
Также имейте в виду, что мягкое / логическое удаление увеличит размер таблицы, поэтому размер индекса.