Новость из категории: Информация

История о данных: а был ли объект?

История о данных: а был ли объект?

Переписывание запросов

История о данных: а был ли объект?
Пример усложненного запроса с предикатами

В ранних версиях SQL Server переписывание запросов выполнялось чрезвычайно редко, и я не ставлю это в вину разработчикам. Ведь всякий раз, переписывая подготовленный кем-то запрос, мы рискуем исказить намерение автора. В ранних версиях SQL Server использовалось множество предикатов, от которых можно было полностью отказаться. Сейчас я продемонстрирую вам пример того, как они используются в текущих версиях SQL Server. Рассмотрим версию запроса, приведенную на экране выше (план этого запроса показан на экране ниже).

История о данных: а был ли объект?
План выполнения усложненного запроса

Обратите внимание на то, что в плане запроса таблица Sales. SalesOrderHeader не упоминается. И опять на помощь пользователю приходит оптимизатор. Он определил, что ни одна из строк никогда не сможет соответствовать обоим предикатам в одно и то же время:
SalesOrderlD <100 
SalesOrderlD > 100

История о данных: а был ли объект?
Пример запроса, который нужно переписать

SQL Server пришел к заключению, что ему нет необходимости даже рассматривать данную таблицу. Это важная концепция, так как многие запросы действительно нужно переписывать. Рассмотрим необычный предикат, показанный на экране выше. Должен вам сказать, что с такими запросами системе SQL Server приходится иметь дело практически ежедневно. Вы можете считать, что никто, находясь в здравом уме и твердой памяти, не станет использовать подобные логические конструкции, однако именно такой бестолковый код выдают генераторы запросов.

Поручить системе SQL Server заняться переписыванием запросов, перед тем как запускать их на выполнение, — это весьма обоснованная идея.

История о данных: а был ли объект?

Пределы разумности

Однако постоянно рассчитывать на «бесплатный сыр» не приходится. SQL Server не может затрачивать слишком много времени на размышления о том, как выполнить тот или иной запрос. Иногда системе нужно просто выполнить его. Это мы можем позволить себе роскошь всестороннего рассмотрения проблемы, a SQL Server не в состоянии целый день решать логические загадки и лишь после этого переходить к выполнению запроса. Оптимизатору известно множество способов зашиты человека от самого себя, но он отнюдь не совершенен. Всегда, когда это возможно, пишите код, который облегчает работу оптимизатора. И. что еще более важно, пишите код, который коллегам было бы легко читать и использовать, иначе говоря, код, в котором явно прослеживаются ваши намерения. Если вы просто хотите уточнить, существует ли тот или иной объект, используйте запрос EXISTS.

Рейтинг статьи

Оценка
0/5
голосов: 0
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх