Чтобы правильно выбирать план запроса, SQL Server должен иметь актуальную информацию о таблицах базы. Просто для примера: если вам нужны какие-то бумаги из шкафа, вы можете ходить за каждым листиком, можете взять несколько папок и разобрать их у себя на столе, а можете передвинуть к своему столу весь шкаф целиком (потом не забыв вернуть). В каждом случае вы будете принимать решение, соотнося количество бумаг, которые вам нужны, с количеством бумаг в шкафу и их размещением там. Если вы ошибетесь, вы можете 100 раз ходить к шкафу, доставая оттуда по листочку, потому что будете думать, что там 10 миллионов бумаг, и все разложены по разным местам, а на самом деле их там всего 100 и было. Или, напротив, ради 10 листов перетащить к себе весь шкаф, считая, что там только эти 10 листов и есть, а там их окажется 10 тысяч. Но человек имеет возможность корректировать свои действия, а SQL Server, который может ошибиться примерно так же, должен будет выполнить работу в соответствии с назначенным планом, не имея возможности до следующего раза его поменять.
Если говорить более точно, то каждый объект статистики создается для списка из одного или нескольких столбцов каждой таблицы и содержит гистограмму, в которой отображается распределение значений в первом из этих столбцов. Если построение идет для нескольких столбцов, то еще статистика содержит сведения о корреляции значений между столбцами. Эти статистические данные корреляции называются значениями плотности и получаются из числа уникальных строк значений столбцов.
Для обновления статистик по всем таблицам базы данных необходимо выполнить следующий SQL запрос (базу надо выбирать свою, а не master и не какую-либо еще):
exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'
Рекомендуется выполнять его не реже раза в день. Время выполнения этой и следующей операций тем больше, чем реже их делают, и если делать их несколько раз в день, они будут проходить быстро. И даже если при этом произойдет снижение производительности на 10–15 %, очень немногие его смогут на себе ощутить.
Чтобы обновление статистик выполнялось по расписанию автоматически, нужно сделать следующее:
 
Рис. 4.4.1. Настройка свойств задачи обновления статистики