без знания базы данных, это невозможно прокомментировать, но общие причины могут включать:
- отсутствующий индекс в столбце, который используется для фильтрации (или неиспользуемый индекс - возможно, из-за
varchar
vs nvarchar
, et c) - блокировки из-за конфликтующих операций
- наличия триггеров, выполняющих неограниченное количество дополнительной скрытой работы
Поскольку запросы, похоже, ожидают единственной RegisteredCustomers
записи, вы можете , возможно, уменьшить некоторые накладные расходы, захватив найденный Id
в локальную переменную в начале и используя этот локальный во всех трех удалениях, но это не волшебная палочка c палочка:
declare @id int = (
select Id from RegisteredCustomers where Email = 'boltestsignupseller@yahoo.com');
delete from CustomerRoles where RegisteredCustomerId = @id;
delete from SellerInfos where RegisteredCustomerId = @id;
delete from RegisteredCustomers where Id = @id;
Тем не менее, скорее всего, вам нужно будет на самом деле исследовать, что происходит план запроса, посмотрите статистику ввода-вывода, посмотрите на индексирование et c).
Если в таблицах много внешних ключей, и эти внешние ключи плохо проиндексированы, может потребоваться не- тривиальный время для выполнения удаления просто потому, что он должен проделать большую работу, чтобы гарантировать, что удаления не нарушают ссылочную целостность. В некоторых случаях предпочтительнее выполнить логическое удаление , а не физическое удаление, чтобы избежать этой работы - т.е. иметь столбец, который означает удаление, и просто выполнить update ... set DeletionDate = GETUTCDATE() ... where ...
вместо delete
(но: вам нужно помнить о фильтрации по этому столбцу в ваших запросах).