SQL Server В по сравнению с СУЩЕСТВУЕТ производительность

Мне любопытно, какое из следующего ниже было бы более эффективным?

Я всегда был немного осторожен относительно использования IN потому что я полагаю, что SQL Server превращает набор результатов в большое IF оператор. Для большого набора результатов это могло привести к низкой производительности. Для небольших наборов результатов я не уверен, что любой предпочтителен. Для больших наборов результатов, не был бы EXISTS быть более эффективными?

WHERE EXISTS (SELECT * FROM Base WHERE bx.BoxID = Base.BoxID AND [Rank] = 2)

по сравнению с.

WHERE bx.BoxID IN (SELECT BoxID FROM Base WHERE [Rank = 2])
110
задан MarredCheese 6 June 2019 в 05:23
поделиться

5 ответов

существует будет быстрее, потому что после того, как двигатель нашел удар, он бросит вызову, так как условие подтвердилось.

С в в он будет собирать все результаты из подпрограммы перед дальнейшей обработкой.

134
ответ дан 24 November 2019 в 03:13
поделиться

Я бы пошел с существовавшими, см. Ниже ссылку:

SQL Server: join vs в VS существует - логическая разница

3
ответ дан 24 November 2019 в 03:13
поделиться

Я не смог воспроизвести его, но свободно говоря, что, кажется, происходит, что это несоответствие кодировки символов. Скорее всего, исходный файл Perl сохранен в кодировке UTF-8. Однако вы не включили использовать utf8; в сценарии. Поэтому он интерпретирует каждый из немецких символов, отличных от ASCII, как два символа и устанавливает набивку соответствующим образом. Но терминал, на котором вы работаете, также находится в режиме UTF-8, поэтому символы печатаются правильно. Попробуйте добавить использовать предупреждения; , и я готов поспорить, что вы получите напечатанное предупреждение, и я не удивлюсь, если добавление использовать utf8; на самом деле исправит проблему.

-121--4349684-

RegexHelper является подключаемым модулем Notepad++ , позволяющим проверять регулярные выражения на наличие открытых документов.

-121--1725405-

С верхней части головы и не гарантированно будет правильно: я верю, что второй будет быстрее в этом случае.

  1. В первом случае коррелированный подзапрос, вероятно, вызовет выполнение подзапроса для каждой строки.
  2. Во втором примере подзапрос должен выполняться только один раз, поскольку он не коррелирован.
  3. Во втором примере IN будет замыкаться, как только обнаружит совпадение.
-1
ответ дан 24 November 2019 в 03:13
поделиться

Я должен добавить свой голос за милосердие. Не могу оставить свет все, чтобы git.; -)

Но что бы вы не выбрали в конце концов, сделать начать использовать один. Я откровенно удивлен, что вы работали со всеми этими языками/инструментами и никогда не начинали с какого-либо VCS. Я, я начал RCS, как только узнал об этом (путь назад на почтенной Amiga 1000, без HD, только 176KB дискеты:)). Не мог представить, что не использует VCS какого-то рода. Я до сих пор использую RCS для отдельных файлов, которым не нужно ничего необычного.

-121--3030619-

Я бы использовал общий, который вы могли бы обработать внешний...

/// <summary>
/// Generic object copy of the same type
/// </summary>
/// <typeparam name="T">The type of object to copy</typeparam>
/// <param name="ObjectSource">The source object to copy</param>
public T CopyObject<T>(T ObjectSource)
{
    T NewObject = System.Activator.CreateInstance<T>();

    foreach (PropertyInfo p in ObjectSource.GetType().GetProperties())
        NewObject.GetType().GetProperty(p.Name).SetValue(NewObject, p.GetValue(ObjectSource, null), null);

    return NewObject;
}
-121--531295-

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

3
ответ дан 24 November 2019 в 03:13
поделиться

Я провел несколько тестов на SQL Server 2005 и 2008, и в обоих случаях EXISTS и IN возвращаются с точно таким же фактическим планом выполнения, как заявили другие. Оптимизатор оптимален. :)

Однако следует помнить, что EXISTS, IN и JOIN иногда могут давать разные результаты, если вы неправильно сформулируете свой запрос: http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx

36
ответ дан 24 November 2019 в 03:13
поделиться
Другие вопросы по тегам:

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