Цитата:
Сообщение от
Arahnid
6. Пишу тот же запрос за 31.12.2010. Данных нет. Запрос вначале выполняется за 0:01:49. Повторно 0:00:11 или 0:0:01.
Цитата:
Сообщение от
Arahnid
Статистика по полю, которое я суммирую, обновилось последний раз вчера? Это плохо или это не о чем не говорит?
Важна статистика не по полю, которое вы суммируете, а по полю, в котором хранится дата (поле, на которое накладывается условие).
Сервер анализирует статистику по полям, ограничивающим запрос, что бы сформировать оптимальный план запроса.
Ваш случай (запрос данных за 31.12.2010) напоминает тот, что был у меня.
Таблица, на которой были проблемы - постоянно растущий лог, 40 млн. записей.
Запрос выбирал записи за текущий день. Сервер не обновлял статистику автоматически, т.к. "считал", что изменения таблицы за день незначительны, и в %-ом отношении так и было - лог за 3 года, изменения за день составляли ~0,1%.
В результате из-за "кривой" статистики сервер не "видел", что за текущую дату данных очень мало, и делал FULL SCAN таблицы. При этом первое выполнение запроса приводило к загрузке большей части таблицы с диска в память (что занимало несколько минут), а последущие выполнения этого же запроса занимало существенно меньше времени (данные уже были в памяти). Через некоторое время данные из памяти (кеш) исчезали, и запрос снова начинал выполняться долго.
При этом же такой же запрос, но за другую дату, выполнялся моментально, т.к. на эту дату была корректная статистика, и вместо FULL SCAN использовался INDEX SEEK.
Побороли принудительным сбором статистки, выполянемой рано утром (что бы гарантировать, что в статистике будут отражены данные за текущий день).