Я начал проект ASP.NET с Entity Framework 4 для своего DAL, используя SQL Server 2008. В моей базе данных у меня есть таблица Users
, которая должна иметь много строк (например, 5.000.000).Как повысить производительность при удалении сущностей из базы данных?
Изначально я мой стол пользователей разработан так:
Id uniqueidentifier
Name nvarchar(128)
Password nvarchar(128)
Email nvarchar(128)
Role_Id int
Status_Id int
Я изменил мой стол, и добавил MarkedForDeletion
колонки:
Id uniqueidentifier
Name nvarchar(128)
Password nvarchar(128)
Email nvarchar(128)
Role_Id int
Status_Id int
MarkedForDeletion bit
Должен ли я удалить каждый объект каждый раз, или используйте атрибут MarkedForDeletion
. Это означает, что мне нужно обновить значение и в какой-то момент времени удалить всех пользователей со значением, установленным в true, с помощью хранимой процедуры или чего-то подобного.
Не соответствует ли стоимость атрибута MarkedForDeletion
такой же, как операция удаления?
Если вам нужна история, измените значение MarkForDeletion на дату. Многие системы, которые я разработал, должны отслеживать информацию в течение многих лет, даже если они «удалены». –
@ Дэйв: +1. nullable smalldatetime отлично работает для меня в этом отношении. Для внутренних систем даже «deletedByUserName». Черт, даже переходите к таблице аудита вообще. :) –
@Dave: в этом случае MarkForDeletion будет представлять дату, когда элемент был «удален», если я правильно понял. Но каково было бы влияние на db? Значение обновления быстрее, чем удаление? С моей точки зрения, это все еще операция доступа к базе данных. –