Учись, школота, запросы писать или о пользе регулярных ревизий кода

Разбирался почему некий сервер медленно работает, попался запрос на глаза. Не могу не поделиться с миром отдельными его фрагментами:

То есть, несколько join собирают колоссальное количество rows, после чего из этого мракобесия вычисляется 1 rows. Был впечатлен и озадачен.

И еще,

на одном из серверов нашел потрясающую штуку- в плане запроса шла вставка во временную таблицу 300 млн записей.  Далее в коде следовала выборка из этой таблицы:

OUTER APPLY (

SELECT TOP 1 * FROM

… Загнать 300 млн записей во временную таблицу чтобы выбрать одну. Жесть! Судя по всему, изначально ожидалось очень небольшое число записей, код был вполне рационален. Но со временем таблицы разнесло, стоимость запроса составила 9+ тыс.

Переписал с WITH- стоимость сразу снизилась до 14 (в 650 раз меньше!), оптимизатор выбрал нужное. Пикантность ситуации состояла в том, что сервер не является критически важным, работает и ладно. Критических нарушений на нем не фиксировалось.  Да и сам по себе сервер неплохой, изъяны кода маскировались производительностью оборудования.

 

..даже на самом благополучном сервере есть смысл перебирать планы запросов.  Нет-нет, да и попадется что-то интересное.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *