Я действительно столкнулся с этой же проблемой на работе пару месяцев назад, и мы заметили, что создание отфильтрованной статистики для более новых строк позволило оптимизатору лучше обрабатывать эти строки. Первоначально он думал, потому что в гистограмме не было данных о том, что будет возвращена только одна строка, поэтому он не делал readaheads и не выполняет соединения с вложенными циклами.

я есть база данных MSSQL2005, в которой есть записи, начиная с 2004 года, в настоящее время в одной конкретной таблице находится чуть менее 1 000 000 записей.

Дело в том, что если я запускаю отчет, сравнивающий данные 2009 года с данными 2010 года, 2008 года с 2009 года, 2009 года с 2009 годом или любой комбинацией лет до этого года, то результаты возвращаются через 1-5 секунд.

Однако, если я запускаю отчет, который включает данные за 2011 год, тогда отчет занимает ~ 6 минут.

Я проверил данные, и они выглядят аналогично предыдущим годам и имеют перекрестные ссылки на те же данные, которые использовались во всех отчетах.

Это как если бы база данных превысила некоторое ограничение; эти данные за этот год стали фрагментированными и, следовательно, доступ к ним затруднен. Я не говорю, что это так, но это может быть, насколько я знаю.

У кого-нибудь есть предложения?

Shaun.

Обновить:
С момента размещения вопроса я нашелDBCC DBREINDEXtable_name который, кажется, сделал свое дело.

Ответы на вопрос(1)

Ваш ответ на вопрос