У меня есть два сервера, на которых я занимаюсь разработкой, и я не администратор баз данных, но у нас их нет, поэтому я пытаюсь выяснить некоторые проблемы с производительностью, которые у меня возникают. Локально у меня установлен SQL Server 2008 R2, и когда ORM, который я использую, выполняет запрос, он возвращает результаты менее чем за секунду. Когда я выполняю тот же самый запрос на нашем сервере разработки с SQL Server 2005, это занимает более минуты. Я рассмотрел план выполнения для них обоих, главное, что бросается в глаза, это то, что последние две строки запроса имеют оператор order by. На сервере 2005 года это 100% стоимости. на сервере 2008 его 0% от стоимости. Есть ли какая-то обстановка, которую я пропускаю? Оба сервера содержат примерно одинаковые данные и одинаковые индексы / ключи / и т. Д. ..... поскольку локальная копия - это просто восстановление из резервной копии.
Мое лучшее предположение - сервер 2005 года сортирует все таблицы, а затем выдает результаты (200 строк). Где сервер 2008 получает все результаты, а затем сортирует их. (200 результатов также.)
Ссылка на план медленного выполнения: http://pastebin.com/sUCiVk8j
Ссылка на план быстрого исполнения: http://pastebin.com/EdR7zFAn
Я бы опубликовал запрос, но он утомительно длинный, потому что у меня есть куча включений и его Entity Framework, который генерирует запрос.
Заранее спасибо.
Редактировать: Я открыл диспетчер задач на сервере SQL, на котором он работает, и ЦП переходит на 100% во время выполнения этого запроса.
Редактировать: добавлена версия XML для jsfiddle.net. pastebin не позволил бы мне из-за размера. Просто использовал окно CSS для XML.
Фактический 2008R2: http://jsfiddle.net/wgsv6/2/
Фактическое 2005: http://jsfiddle.net/wgsv6/3/