Объединнение таблиц в SQL Server


4 0

Сейчас ВОВА в комментариях показал, что не все понимают, как работает SQL сервер. Это нормально, если вы не работали с оптимизацией достаточно долгое время, чтобы знать, как работает оптимизатор SQL Server. А в боьшинстве случаев он работает отлично и иногда даже откровенно тупой запрос может выполнить быстро. Было предложение перенести одно из сравнений в on. Просто для прикола, возьмите и напишите вот такой запрос:

select * 
from Table1 a
	inner join Table2 at on a.ID = at.ID

Замерьте план его выполнения и замерьте статистику (set statistics io on). Для замера статистики выполните запрос пару раз.

А вот теперь напишите запрос вот так:

select * 
from Table1 a
	inner join Table2 at on 1=1
where a.ID = at.ID

Он возвращает абсолютно то же самое и самое банальное - SQL сервер достаточно сообразительный, чтобы увидеть, что эти запросы совершенно одинаковы и поэтому план выполнения у них будет совершенно одинаковым и статистика будет до логического чтения одинаковой. Я на 100% уверен в этом.


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

BOBA

02 Марта 2012

Да, исходников оптимизатора у меня нет. Но, смею предположить, что его делали люди... и ему надо стараться помочь выполнить свою работу.
А, запросы, из ТОЙ заметки (http://www.flenov.info/blog.php?catid=1443) и приводимые здесь - совсем не равнозначные по степени нагрузки.


Михаил Фленов

02 Марта 2012

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

Иногда перемена мест слагаемых меняет план выполнения, но далеко не всегда.


BOBA

03 Марта 2012

Твои слова да богу в уши. Когда инструментарий станет абсолютным, - программирование превратиться в чистое искусство (или, примитивное ремесло).
Попыток было много, и будем надеяться, что не переведуться умные, ответственные дяди с горящими глазами.
А, оптимизатор смотрит может быть и верно, и даже видет цель.
Но, как он идет к этой цели - вопрос.


Михаил Фленов

03 Марта 2012

А, оптимизатор смотрит может быть и верно, и даже видет цель.


Про оптимизатор SQL Server можно почитать в статьях на MSDN, это не поиск Google и его работа достаточно хорошо расписана. Нужно собрать данные, которые ты хочешь получить и условия, которые есть в две кучки, вне зависимости от того, где ты эти условия написал. Потом нужно определить, какие индексы есть, какие индексы и статистика имеют меньший вес и их и использовать.


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

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне