|
|
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
Общая структура: SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... Сначала из базы в промежуточный результат выбирается вся инфа по нужным таблицам: select ... from .... (включая join-ы), затем из промежуточного результата выбирается по остальным условиям необходимое. Либо сначала select ... from ... where, а затем оставшиеся условия. Какая последовательность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2012, 10:27 |
|
||
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
КантачесОбщая структура: SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... Сначала из базы в промежуточный результат выбирается вся инфа по нужным таблицам: select ... from .... (включая join-ы), затем из промежуточного результата выбирается по остальным условиям необходимое. Либо сначала select ... from ... where, а затем оставшиеся условия. Какая последовательность?Есть такая штука - "план запроса". Если в запросе 1 - 2 таблицы - то там все просто, а если больше 10 - план может быть очень нетривиальным. У любой СУБД есть специальные команды, которые выводят план запроса, плюс возможности на этот план влиять, плюс документация по всему этому. Удачи в поисках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2012, 11:31 |
|
||
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
rockclimber, то есть не существует единой последовательности, типа сначала выполняются те команды, затем результат фильтруется этими командами и т.п.? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2012, 12:01 |
|
||
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
Кантачесrockclimber, то есть не существует единой последовательности, типа сначала выполняются те команды, затем результат фильтруется этими командами и т.п.?Что вы называете "единственной последовательностью"? Есть некоторый алгоритм, он в некотором роде "единственный" у каждой СУБД. Алгоритм рассчитан на построение такого плана выполнения запроса, который приведет к выполнению запроса за минимальное время. Сферическая СУБД в вакууме будет работать так, как вы написали - выберет все таблицы, сджойнит, отфильтрует лишнее и т. д. А конкретная СУБД в конкретной системе ограничена выделенной ей оперативной памятью, дисковым пространством, наличием определенных индексов и т. п. Все эти ограничения учитываются при построении плана. В общем и целом "единый алгоритм" можно описать так: 1. Проанализировать запрос 2. Оценить имеющиеся ресурсы 3. Оценить количество данных, которые надо выбирать 4. Построить план запроса 5. Выполнить план запроса То, что вы написали в первом посте - это детализация пункта 5, и она, естественно, будет зависеть от результатов работы в пунктах 1 - 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2012, 12:12 |
|
||
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
По стандарту SQL-92 1. Выполняется FROM - формируется рабочая таблица 2. к этому результату применются предикаты предложения WHERE 3. GROUP By 4. HAVING 5. SELECT 6. ORDER BY (формально не входит в определение SELECT) (C) Джо Селко. SQL для профессионалов. Програмирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2012, 14:00 |
|
||
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
rockclimber , да, алгоритм - не правильно назвал. Придется тогда удовлетворить любопытство стандартом, о котором vladK написал (спасибо за название книги) - на уровне 1с-ника, думаю, хватит. Всем спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2012, 15:09 |
|
||
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
В HAVING вроде как доступны алиасы и переменные заданные в SELECT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2012, 17:52 |
|
||
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
HettВ HAVING вроде как доступны алиасы и переменные заданные в SELECTВ одних СУБД доступны, в других СУБД не доступны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2012, 21:32 |
|
||
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
Кантачес, надо читать план исполнения по каждому программному продукту отдельно. То что написано в SQL-92 - это чистая теория. Oracle к примеру может использовать брать данные из индексов не обращаясь к таблицам или если использована опция QueryRewrite и брать данные из mviews. Тоесть 1 пункт этого алгоритма ("По стандарту SQL-92") может быть очень сильно расширен и дополнен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2012, 21:35 |
|
||
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
vladKПо стандарту SQL-92 По стандарту результат выполнения запроса должен быть эквивалентен тому, который был бы в этом случае. Но стандарт не говорит, что должно исполняться именно так. Правда и здесь есть некоторые тонкости (пожалуй, я для любой серьёзной СУБД возьмусь нарисовать запрос, который это нарушит). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2012, 21:05 |
|
||
|
Какая последовательность выполнения sql-запроса?
|
|||
|---|---|---|---|
|
#18+
КантачесОбщая структура: SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... Сначала из базы в промежуточный результат выбирается вся инфа по нужным таблицам: select ... from .... (включая join-ы), затем из промежуточного результата выбирается по остальным условиям необходимое. Либо сначала select ... from ... where, а затем оставшиеся условия. Какая последовательность? В Оракле есть средство трассировки запросов. Там очень подробно рассматривается любой запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2012, 11:38 |
|
||
|
|

start [/forum/topic.php?fid=16&tid=1342370]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
151ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 420ms |

| 0 / 0 |
