У меня есть довольно сложная (или уродливая, в зависимости от того, как вы на это смотрите) хранимая процедура, работающая на SQL Server 2008. Она основывает большую логику на представлении, которое имеет таблицу pk и таблицу fk. Таблица fk оставляется присоединенной к таблице pk чуть более 30 раз (таблица fk имеет плохой дизайн - она использует пары «имя-значение», которые мне нужно выровнять. К сожалению, это сторонняя организация, и я не могу ее изменить).
В любом случае, он работал нормально в течение нескольких недель, пока я периодически не замечал пробежку, которая занимала бы 3-5 минут. Оказывается, это время, которое требуется для генерации плана запроса. Как только план запроса существует и кэшируется, сама хранимая процедура выполняется очень эффективно. Все идет гладко, пока нет причин для повторного создания и кэширования плана запросов.
Кто-нибудь видел это? Почему создание плана занимает так много времени? Есть ли способы, чтобы заставить его придумать план быстрее?