Проблема производительности этого запроса не является результатом использования оператора IN
.
Этот оператор очень хорошо работает с небольшими списками (скажем, менее 1000 членов).
Бутылка производительностиЗдесь дело в том, что SQL Server выполняет сканирование по индексу вместо поиска по индексу (что очень дорого) и поиск по ключу, который составляет 20% от стоимости запроса.
Чтобы избежать обеих проблем,можно добавить индекс для IsDeleted
, ReferencedxyzType
и ReferencedxxxId
- вероятно, в этом точном порядке.
Настройка производительности SQL - это наука, которая имеет тенденцию выглядеть немного как искусство или магия - в любом случаедля этого требуется хорошее знание как теории, так и практики настройки индексов и соответствующих системных требований.
Поэтому я предлагаю следующее: не пытайтесь решить эту проблему самостоятельно с помощью незнакомцев в Интернете.,На несколько часов / дней найдите эксперта на консультационную работу, чтобы проанализировать систему и помочь вам настроить ее.
Узнайте все, что сможете во время этого процесса.Задавайте вопросы обо всем, что не тривиально.Это будут хорошо потраченные деньги.