Могу ли я использовать Руководства по планированию для оптимизации медленного выполнения запроса?
Программа синхронизации синхронизирует данные между нашим сервером SQL и онлайн-базой данных. Каждые 5 минут программа выполняет запросы ко всем таблицам, в формате:
select max(ID) from table
После этого программа получает информацию из онлайн-базы данных, используя max(ID) для получения только новых записей. Запрос выполняется быстро для небольших таблиц, но в некоторых таблицах миллионы записей.
Производительность можно повысить с помощью оператора Where:
select max(ID) from table where date >= dateadd(dd,-30,getdate())
К сожалению, это старая программа, которую нельзя больше менять. (без поставщика и без исходного кода)
Я прочитал кое-что о планах, которые должны повысить производительность запросов.
Могу ли я использовать руководство плана, чтобы изменить эти запросы, чтобы они выполнялись намного быстрее?
1 ответ
Я бы постарался держаться подальше от руководств плана, если вы не попробовали все остальное, чтобы помочь SQL Server выбрать лучший план выполнения; причина в том, что вы заставляете SQL Server выбирать, возможно, не лучший план выполнения, и, если ваши статистические данные верны, SQL Server делает огромную работу, чтобы предоставить вам очень хороший план оценки.
Извините, если это будет затянуто, но производительность SQL Server основана на статистике, а если статистика отключена, ваш запрос не будет работать оптимально. Это то место, где я бы начал.
Я бы сначала запустил ваш запрос и сгенерировал примерный план выполнения и фактический план выполнения. Если вы никогда не работали с планами выполнения, вот несколько сайтов, которые помогут вам понять операторов и как интерпретировать некоторые из наиболее распространенных операторов; Rasanu Consulting (Joins), Microsoft (Joins), Simple Talk (Common Operatiors), Microsoft (Все операторы). Планы выполнения генерируются из статистики хранилищ SQL Server по индексам и неиндексированным столбцам. Я предполагаю, что ваш запрос хранится в процедуре, в которой хранится первоначальный план выполнения. К сожалению, изменения в запросе в хранимой процедуре могут вызвать проблемы с производительностью из-за устаревшего плана, и процедура должна будет быть перекомпилирована.
Основываясь на результатах вашего плана выполнения, вы можете обнаружить, что простой кластеризованный индекс будет способствовать повышению производительности, или вы обнаружите, что точная настройка предложения where приведет к более точным оценкам плотностей. Вот несколько сайтов, которые действительно хорошо объясняют статистику; Патрик Кейслер, Ицик Бен-Ган, Microsoft
Вы можете спросить: "Какое это имеет отношение к моему вопросу?" который ожидает простого ответа "да" или "нет", но эффективное исправление производительности запроса начинается с понимания статистики и планов выполнения.
Надеюсь это поможет!