Baik! Seperti yang dikatakan semua orang, itu tergantung situasinya.
Jika Anda memiliki indeks pada kolom seperti UserName atau EmailID - dan Anda tidak pernah mengharapkan UserName atau EmailID yang sama digunakan lagi; Anda bisa menggunakan soft delete.
Karena itu, selalu periksa apakah operasi SELECT Anda menggunakan kunci utama. Jika pernyataan SELECT Anda menggunakan kunci utama, menambahkan bendera dengan klausa WHERE tidak akan membuat banyak perbedaan. Mari kita ambil contoh (Pseudo):
Pengguna Tabel (UserID [primary key], EmailID, IsDeleted)
SELECT * FROM Users where UserID = 123456 and IsDeleted = 0
Kueri ini tidak akan membuat perbedaan apa pun dalam hal kinerja karena kolom UserID memiliki kunci utama. Awalnya, ini akan memindai tabel berdasarkan PK dan kemudian menjalankan kondisi selanjutnya.
Kasus di mana penghapusan lunak tidak dapat bekerja sama sekali:
Daftar di sebagian besar situs web menggunakan EmailID sebagai identifikasi unik Anda. Kami tahu betul, sekali EmailID digunakan di situs web seperti facebook, G +, itu tidak dapat digunakan oleh orang lain.
Ada saatnya pengguna ingin menghapus profilnya dari situs web. Sekarang, jika Anda membuat penghapusan logis, pengguna tersebut tidak akan pernah bisa mendaftar lagi. Selain itu, mendaftar lagi menggunakan EmailID yang sama tidak berarti memulihkan seluruh riwayat. Semua orang tahu, penghapusan berarti penghapusan. Dalam skenario seperti itu, kami harus melakukan penghapusan fisik. Namun untuk mempertahankan seluruh riwayat akun, kami harus selalu mengarsipkan catatan tersebut di tabel arsip atau tabel yang dihapus.
Ya, dalam situasi di mana kami memiliki banyak tabel asing, penanganannya cukup rumit.
Juga perlu diingat bahwa penghapusan lunak / logis akan meningkatkan ukuran tabel Anda, jadi ukuran indeks.