SQL Server 2005 - порядок внутренних объединений

sizeof() будет только работать на массив фиксированного размера (который может быть статичным, базирующийся стек или в структуре).

при применении его к массиву, созданному с malloc (или новый в C++) Вы будете всегда получать размер указателя.

И да, это основано на информации о времени компиляции.

5
задан bummi 15 November 2014 в 17:31
поделиться

3 ответа

SQL является декларативным, то есть порядок JOIN не имеет значения.

Однако на практике он может, например, если это сложный запрос, когда оптимизатор не исследует все параметры (которые теоретически это может занять месяцы).

Другой вариант состоит в том, что это совсем другой запрос, если вы измените порядок и получите другие результаты, но обычно это происходит с ВНЕШНИМИ СОЕДИНЕНИЯМИ.

И это также может быть то, как предложение ON указано. Он должен измениться, если вы измените порядок предложения FROM. Если вы не используете более старое (и плохое) предложение JOIN-in-the-WHERE.

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

9
ответ дан 13 December 2019 в 05:39
поделиться

Потому что, изменяя порядок объединений, SQL Server предлагает другой план выполнения для вашего запроса (скорее всего, он меняет способ фильтрации таблиц на основе ваших объединений).

В этом случае я предполагаю, что у вас есть несколько больших таблиц ... одна из которых выполняет большую часть фильтрации.

В одном запросе ваши объединения объединяют несколько больших таблиц вместе, а затем фильтруют записи в конце.

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

Вы всегда можете проверить, но запустив запрос с помощью «Показать план запроса»

4
ответ дан 13 December 2019 в 05:39
поделиться

Я бы подумал, что он достаточно умен, чтобы сделать это, но очевидно, что он все еще выполняет объединения в том порядке, в котором вы их явно перечисляете ... Что касается того, почему это влияет на производительность, если первое соединение производит промежуточный результирующий набор только из 100 записей в одной схеме упорядочивания, затем второе соединение будет от этого набора из 100 записей к третьей таблице. Если размещение другого соединения первым дает первый промежуточный результирующий набор из миллиона записей, то второе соединение будет из набора результатов из миллиона строк в третью таблицу ...

-1
ответ дан 13 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: