Сегодня я снова столкнулся с ОСНОВНОЙ проблемой, связанной с анализом параметров в SQL Server 2005.
У меня есть запрос, сравнивающий некоторые результаты с известными хорошими результатами. Я добавил столбец к результатам и известным хорошим результатам, чтобы каждый месяц я мог загружать результаты нового месяца в обе стороны и сравнивать только текущий месяц. Новый столбец находится первым в кластерном индексе, поэтому новые месяцы добавятся к концу.
Я добавляю критерий к своему предложению WHERE
- оно генерируется кодом, поэтому это буквальная константа:
WHERE DATA_DT_ID = 20081231
- Это избыточно, потому что все DATA_DT_ID на данный момент 20081231.
Производительность идет в ногу. От 7 секунд сравнивать около 1,5м рядов до 2 часов и ничего не заканчивать. Запуск сгенерированного SQL прямо в SSMS - без SP.
Я использую SQL Server уже 12 лет, и у меня никогда не было такого количества проблем со сниффингом параметров, как у меня на этом производственном сервере с октября (сборка 9.00.3068.00). И в любом случае это не потому, что он был запущен в первый раз с другим параметром или изменена таблица. Это новая таблица, и она запускается только с этим параметром или без условия WHERE
.
И, нет, у меня нет доступа к БД, и они не дали мне достаточно прав, чтобы увидеть планы выполнения.
Дело в том, что я не уверен, что смогу справиться с этой системой пользователям SQL Server с опытом работы всего пару лет.
ОБНОВЛЕНИЕ Оказывается, что хотя статистика утверждает, что она актуальна, запуск команды ОБНОВЛЕНИЕ СТАТИСТИКИ С FULLSCAN устраняет проблему.
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ Даже при воссоздании SP с использованием WITH RECOMPILE и UPDATE STATISTICS оказалось, что запрос нужно было переписать другим способом, чтобы использовать NOT IN вместо LEFT JOIN с проверкой NULL .