Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 порядка выполнения операторов (select, from, where, having, group by, top)  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Порядка выполнения операторов (select, from, where, having, group by, top)
сервером.
Где-то на форуме есть, найти не могу.

Что сервер делает в первую очередь INNER JOIN или WHERE ? Хочется увидеть порядок для всех операторов MS SQL.
11 май 12, 15:02    [12536931]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
trew, изучайте
11 май 12, 15:04    [12536957]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
kDnZP,
Это не то. Необходимо оптимизировать запрос, состоящий из нескольких таблиц.
Что сервер делает в первую очередь INNER JOIN или WHERE ?
11 май 12, 15:06    [12536992]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
trew, проблемы со зрением?
11 май 12, 15:07    [12537003]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
Glory
Member

Откуда:
Сообщений: 104751
trew
Что сервер делает в первую очередь INNER JOIN или WHERE ?

Ну так откройте линк и прочтите "Логический порядок обработки инструкции SELECT"
11 май 12, 15:07    [12537007]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
trew
Что сервер делает в первую очередь INNER JOIN или WHERE ?
Что в какую очередь делает сервер, написано в плане выполнения запроса.
11 май 12, 15:08    [12537014]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
kDnZP,
Да, был невнимателен.

Логический порядок обработки инструкции SELECT

Спасибо.
11 май 12, 15:09    [12537027]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
trew
kDnZP,
Это не то. Необходимо оптимизировать запрос, состоящий из нескольких таблиц.
Что сервер делает в первую очередь INNER JOIN или WHERE ?

это оптимизатор выбирает порядок выполнения запроса. Синтаксически порядок можно предопределить только с помощью хинтов и всяких хитростей.
11 май 12, 15:28    [12537253]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
миксер
Guest
kDnZP,
Это не то. Необходимо оптимизировать запрос, состоящий из нескольких таблиц.
Что сервер делает в первую очередь INNER JOIN или WHERE ?

это оптимизатор выбирает порядок выполнения запроса. Синтаксически порядок можно предопределить только с помощью хинтов и всяких хитростей.


Очень сомневаюсть, что это решает оптимизатор
3 апр 15, 14:18    [17469483]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37202
миксер
kDnZP,
Это не то. Необходимо оптимизировать запрос, состоящий из нескольких таблиц.
Что сервер делает в первую очередь INNER JOIN или WHERE ?

это оптимизатор выбирает порядок выполнения запроса. Синтаксически порядок можно предопределить только с помощью хинтов и всяких хитростей.


Очень сомневаюсть, что это решает оптимизатор
Это вы тут вообще о чем?
3 апр 15, 14:22    [17469519]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
o-o
Guest
это миксер беседует с trew, к-ый общается с kDnZP 2 года назад 12536992
сегодня день бесед неизвестно откуда заявившихся с неизвестно куда пропавшими
3 апр 15, 14:31    [17469578]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
миксер
Guest
Гавриленко Сергей Алексеевич,

Ограничение использования команд Outer JOIN
Команды OUTER JOIN обрабатываются не так, как команды INNER JOIN, поскольку оптимизатор не пытается изменить порядок объединения таблиц, указанных в команде OUTER JOIN, как это происходит при обработке команды INNER JOIN. Сначала выполняется обращение к внешней таблице (левая таблица в команде LEFT OUTER JOIN и правая таблица в команде RIGHT OUTER JOIN), а затем — к внутренней таблице. Использование фиксированного порядка объединения может приводить к созданию неоптимальных планов выполнения.

Я вот читаю и не могу понять фразу
Использование фиксированного порядка объединения может приводить к созданию неоптимальных планов выполнения.

Что такое "фиксированного порядка "
3 апр 15, 14:33    [17469586]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34687
trew
Порядка выполнения операторов (select, from, where, having, group by, top)
сервером.
... Хочется увидеть порядок для всех операторов MS SQL.


Порядок выполнения фраз запроса не определён.

Единственно, что можно гарантировать, что HAVING выполняется после группировки, если она есть.
Также TOP выполняется после сортировки (ORDER BY)
3 апр 15, 14:44    [17469659]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
o-o
Guest
миксер
Я вот читаю и не могу понять фразу
Использование фиксированного порядка объединения может приводить к созданию неоптимальных планов выполнения.

Что такое "фиксированного порядка "

капец, товарищ миксер.
надо еще найти, из какого контекста вырвана фраза, да?
и почему вопрос в другую тему запихнули, тоже догадаться нужно.

в статье Query Performance Tuning
говорят, что когда переписываешь подзапросы через соединения, планы поразнообразнее могут стать, т.к.
в случае inner join опримизатор может порядок соединения таблиц менять как угодно.
а в случае внешних соединений этого не будет.
результат же зависит от порядка LEFT/RIGHT JOIN-ов
+ ORIGINAL TEXT

Rewrite Subqueries to Use JOIN

Sometimes you can rewrite a subquery to use JOIN and achieve better performance. The advantage of creating a JOIN is that you can evaluate tables in a different order from that defined by the query.
[...]
OUTER JOINs are treated differently from INNER JOINs in that the optimizer does not try to rearrange the join order of OUTER JOIN tables as it does to INNER JOIN tables. The outer table (the left table in LEFT OUTER JOIN and the right table in RIGHT OUTER JOIN) is accessed first, followed by the inner table. This fixed join order could lead to execution plans that are less than optimal.
3 апр 15, 14:55    [17469736]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Цитата взята из статьи относящийся к SQL Server Compact. Я не знаю (и, честно говоря, мне это не очень интересно), один ли там relational engine или какая-то урезанная/облегченная его версия, в сравнении с редакциями Express/Standard/Enterprise. Если вопрос касается именно SQL Server Compact – то возможно стоит просто проверить написанное в статье самому.

Если же вы набрели на эту статью случайно, и пытаетесь применить ее к традиционной «полноценной» редакции, то там мягко выражаясь устаревшие и/или неточные сведения.

Есть порядок соединения логический (т.е. смысловой), а есть физический (то как реально будет выполняться). Первый порядок – оптимизатор не может менять, иначе, получается, он пишет запрос за вас. Второй порядок, при условии сохранения первого, он может менять как хочет и в рамках этого может:
- Менять местами соединения, как внутренние, так и внешние
- Менять местами целые ветки соединений
- Раскрывать подзапросы
- Включать и исключать группировки
- Менять логические типы соединений
- Исключать и добавлять соединения

Все это, конечно, при условии сохранения смысла запроса.

Касательно отличий порядка внутренних и внешних соединений, отличия в том, что в запросе со внутренними соединениями оптимизатор имеет больше вариантов перестановок при сохранении смысла, с внешними соединениями меньше вариантов.

Есть еще случаи, когда порядок и вовсе задан фиксировано: явное указание в соединении типа соединения, явное указание фиксированного порядка в указаниях запроса FORCE ORDER, использование указания USE PLAN, комбинация различных факторов создающих похожие ограничения в неявном виде. В таком случае, оптимизатор должен использовать только заданный порядок, что может приводить не неэффективному плану (сразу или по истечении времени).
3 апр 15, 15:25    [17469999]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
o-o
Guest
SomewhereSomehow
Я не знаю (и, честно говоря, мне это не очень интересно), один ли там relational engine или какая-то урезанная/облегченная его версия, в сравнении с редакциями Express/Standard/Enterprise

еще какая урезанная, впечатление, что общаешься с 2000-ым.
понимает лишь базовый синтаксис и ошибки погано парсит.
3 апр 15, 16:05    [17470372]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
o-o
Guest
SomewhereSomehow,

а можете лучше про Merge Interval популярно объяснить?
не знаю, прилично ли открывать тему с указанием SomewhereSomehow в явном виде
(у меня бывают...эээ...проблемы с заголовками тем :)),
но хотелось бы вас по этому поводу послушать:
Merge Interval или как o-o себе нагенерило пустое top 20
примите, плиз, приглашение обсудить :)
3 апр 15, 17:22    [17470932]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
o-o,

Каждый отдельный вопрос, в отдельной теме, имхо.
3 апр 15, 17:51    [17471056]     Ответить | Цитировать Сообщить модератору
 Re: порядка выполнения операторов (select, from, where, having, group by, top)  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4823
kDnZP
trew, изучайте


Note that the actual physical execution of the statement is determined by the query processor and the order may vary from this list.
3 апр 15, 17:56    [17471080]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить