Transact-SQL - sub запрос или лево-соединение?

Я просто попробовал, комментируя super (); делает то же самое, не комментируя это как @Mark Peters

package javaapplication6;

/**
 *
 * @author sborusu
 */
public class Super_Test {
    Super_Test(){
        System.out.println("This is super class, no object is created");
    }
}
class Super_sub extends Super_Test{
    Super_sub(){
       super();
       System.out.println("This is sub class, object is created");
    }
    public static void main(String args[]){
        new Super_sub();
    }
}
11
задан Joel Coehoorn 23 October 2008 в 16:35
поделиться

7 ответов

На небольших наборах данных они - промывка когда дело доходит до производительности. При индексации LOJ немного лучше.

Я нашел на больших наборах данных, что внутреннее объединение (внутреннее объединение будет работать также.) превзойдет подзапрос по характеристикам очень большим фактором (извините, никакие числа).

12
ответ дан 3 December 2019 в 03:37
поделиться

В большинстве случаев оптимизатор будет рассматривать их то же.

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

Кроме того, второй синтаксис более гибок, если существует, далее агрегируется, который может быть добавлен в будущем, кроме того, для ПОДСЧЕТА, как МИН (some_scalar), МАКС (), AVG () и т.д.

6
ответ дан 3 December 2019 в 03:37
поделиться

При использовании Studio управления SQL Server можно ввести обе версии в Редактор запросов и затем щелкнуть правой кнопкой и выбрать Display Estimated Execution Plan. Это даст Вам двухпроцентные затраты относительно пакета. Если они, как будут ожидать, займут то же время, то они оба покажут 50% - в этом случае, выберут, какой бы ни Вы предпочитаете по другим причинам (легче читать, легче поддержать, лучше соответствовать Вашим стандартам кодирования и т.д.). Иначе можно выбрать тот с более низкой стоимостью процента относительно пакета.

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

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

2
ответ дан 3 December 2019 в 03:37
поделиться

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

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

5
ответ дан 3 December 2019 в 03:37
поделиться

Нет никакого ясного ответа на этом. Необходимо просмотреть План SQL. С точки зрения алгебры отношений они чрезвычайно эквивалентны.

1
ответ дан 3 December 2019 в 03:37
поделиться

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

Если производительность является проблемой, то экспериментируйте с перезаписью запроса с помощью другой формы. Иногда оптимизатор будет использовать индекс для одной формы а не другого.

0
ответ дан 3 December 2019 в 03:37
поделиться

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

1
ответ дан 3 December 2019 в 03:37
поделиться
Другие вопросы по тегам:

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