Мне любопытно, какое из следующего ниже было бы более эффективным?
Я всегда был немного осторожен относительно использования 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])
существует
будет быстрее, потому что после того, как двигатель нашел удар, он бросит вызову, так как условие подтвердилось.
С в
в он будет собирать все результаты из подпрограммы перед дальнейшей обработкой.
Я не смог воспроизвести его, но свободно говоря, что, кажется, происходит, что это несоответствие кодировки символов. Скорее всего, исходный файл Perl сохранен в кодировке UTF-8. Однако вы не включили использовать utf8;
в сценарии. Поэтому он интерпретирует каждый из немецких символов, отличных от ASCII, как два символа и устанавливает набивку соответствующим образом. Но терминал, на котором вы работаете, также находится в режиме UTF-8, поэтому символы печатаются правильно. Попробуйте добавить использовать предупреждения;
, и я готов поспорить, что вы получите напечатанное предупреждение, и я не удивлюсь, если добавление использовать utf8;
на самом деле исправит проблему.
RegexHelper является подключаемым модулем Notepad++ , позволяющим проверять регулярные выражения на наличие открытых документов.
-121--1725405-С верхней части головы и не гарантированно будет правильно: я верю, что второй будет быстрее в этом случае.
IN
будет замыкаться, как только обнаружит совпадение. Я должен добавить свой голос за милосердие. Не могу оставить свет все, чтобы 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- Планы выполнения обычно будут идентичными в этих случаях, но пока вы не увидите, как коэффициенты оптимизатора во всех других аспектах индексов и т.д., вы действительно никогда не узнаете.
Я провел несколько тестов на SQL Server 2005 и 2008, и в обоих случаях EXISTS и IN возвращаются с точно таким же фактическим планом выполнения, как заявили другие. Оптимизатор оптимален. :)
Однако следует помнить, что EXISTS, IN и JOIN иногда могут давать разные результаты, если вы неправильно сформулируете свой запрос: http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx