Atul Khanduri Ответов: 1

Порядок выполнения SQL-запросов


Мне любопытен порядок выполнения SQL-запросов. Я провел небольшое исследование по этому поводу. Я нашел это:

http://stackoverflow.com/questions/4596467/order-of-execution-of-the-query

В этой ссылке кто-то заявил следующее:

"SQL не имеет порядка выполнения. Это декларативный язык. Оптимизатор может свободно выбирать любой ордер, который он считает подходящим для получения наилучшего времени исполнения. Учитывая любой SQL-запрос, в принципе невозможно никому притвориться, что он знает порядок выполнения. Если добавить подробную информацию о задействованной схеме (точное определение таблиц и индексов) и расчетные мощности (размер данных и селективность ключей), то можно сделать предположение о вероятном порядке выполнения."

Неужели? Нет никакого порядка???

Но в следующей ссылке я получил логический порядок обработки.

http://blog.sqlauthority.com/2009/04/06/sql-server-logical-query-processing-phases-order-of-statement-execution/


1. FROM
2. ON
3. OUTER
4. WHERE
5. GROUP BY
6. CUBE or ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP


Так что я немного запутался и теперь действительно очень любопытно узнать, есть ли на самом деле какой-то порядок или нет...!!!!

CHill60

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

ashok_n

Идеально и очень приятно

Member 13375650

нам нужна изоляция, чтобы 2 транзакции не могли влиять друг на друга ,но если предположить, что 2 транзакции, транзакция 1 обновляет строку, то транзакция 2 должна иметь эффект
так что просьба уточнить

1 Ответов

Рейтинг:
10

Zoltán Zörgő

Ну, это не так просто. Это декларативный язык, но, конечно, в нем есть логика, алгоритм. Но не в этом смысле. Для простого запроса это может выглядеть одинаково, но в целом существует так называемая задача оптимизатора запросов, которая вычисляет план запроса для этого конкретного запроса. План запроса учитывает индексы, размеры наборов и многие другие обстоятельства, чтобы получить конкретный порядок выполнения.
Посмотрите здесь для некоторой теории: http://infolab.stanford.edu/~hyunjung/cs346/ioannidis. pdf[^]
Но если вы загуглите "query optimizes", то найдете несколько интересных статей о разных СУБД, так как это ключевая особенность всех, а значит, и разных.


Amol_B

+5 :)