при добавлении столбца sql, не являющегося кластером, к таблице выбор с внутренним объединением занимает слишком много времени, чтобы оправдать - PullRequest
0 голосов
/ 02 ноября 2010

у меня есть таблица, содержащая более 4 миллионов записей, что заставляет запрос select занимать много времени, поэтому я решил добавить некластеризованный столбец, чтобы сократить время, и это прекрасно работает, что сокращает его с 2 минут до менее 1второй.но позже я обнаружил, что это изменение создает некоторые проблемы при выполнении другой процедуры с внутренним соединением с этой таблицей, из-за чего выполнение занимает слишком много времени (более 7 минут).я не знаю, почему это происходит

SELECT   [MessageID],
         SystemMinorStatus.EnglishDescription as EnglishStatusDescription
FROM [dbo].[Message]  
inner join SystemMinor as SystemMinorStatus 
on SystemMinorStatus.MinorID = [Message].Status]
WHERE     
[Message].[SubscriberID]= 22781 AND 
[Message].[IsDeleted]= 0
ORDER BY sendDate DESC

, и какое-то время выдает мне это сообщение об ошибке «Транзакция (ID процесса 74) заблокирована на ресурсах блокировки другого процесса и была выбрана в качестве жертвы тупика.Перезапустите транзакцию. "

У кого-нибудь есть объяснение этому поведению

1 Ответ

1 голос
/ 02 ноября 2010

Deadlock указывает, что у вас есть какой-то другой код, который блокирует таблицу для редактирования или вставки, может быть, неправильно.

Вы можете добавить «with (nolock)» после имени таблицы, чтобы игнорировать блокировки при чтении, ноэто может привести к несогласованности данных.

Вы также должны попытаться проверить активность на сервере sql, чтобы попытаться выяснить, какие запросы занимают много времени, для этого подойдет Profiler, добавьте фильтр, включающий только запросыэто займет больше, чем, скажем, 1000 мс, затем уменьшите это, пока не получите хиты или не увеличите, если вы получите много хитов и начнете проверять, что происходит.

Также проверьте все ваши индексы, запрос определенно не должен занимать много времени.Обычно у меня гораздо более тяжелые запросы, выполняемые в таблицах со 100 миллионами строк, которые выполняются за 0,1 секунды или менее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...