Явные против неявных объединений SQL

JsonFx может десериализовать json в динамические объекты.

https://github.com/jsonfx/jsonfx

Сериализовать в / из динамические типы (по умолчанию для .NET 4.0):

blockquote>
var reader = new JsonReader(); var writer = new JsonWriter();

string input = @"{ ""foo"": true, ""array"": [ 42, false, ""Hello!"", null ] }";
dynamic output = reader.Read(input);
Console.WriteLine(output.array[0]); // 42
string json = writer.Write(output);
Console.WriteLine(json); // {"foo":true,"array":[42,false,"Hello!",null]}

373
задан user8839064 26 October 2017 в 19:14
поделиться

8 ответов

Мудрая производительность, они - точно то же (по крайней мере, в SQL Server).

пз: знайте, что IMPLICIT OUTER JOIN синтаксис удерживается от использования начиная с SQL Server 2005. (IMPLICIT INNER JOIN синтаксис, как используется в вопросе все еще поддерживается)

Депрекация "Старого Стиля" Синтаксис СОЕДИНЕНИЯ: Только Частичная Вещь

123
ответ дан daniel kullmann 26 October 2017 в 19:14
поделиться

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

121
ответ дан grom 26 October 2017 в 19:14
поделиться

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

я соглашаюсь с grom, что необходимо использовать синтаксис соединения ANSI. Как они сказали, главная причина для ясности. Вместо того, чтобы иметь где пункт с большим количеством предикатов, некоторые из которых объединяющие таблицы и другие, ограничивающие строки, возвращенные с ANSI, присоединяются к синтаксису, который Вы заставляете его ослепляюще очистить, какие условия используются для присоединения к таблицам и которые используются для ограничения результатов.

14
ответ дан andy47 26 October 2017 в 19:14
поделиться

@lomaxx: Просто для уточнения я вполне уверен, что оба выше синтаксиса поддерживаются SQL Serv 2005. Синтаксис ниже НЕ поддерживается однако

select a.*, b.*  
from table a, table b  
where a.id *= b.id;

А именно, внешнее объединение (* =) не поддерживается.

6
ответ дан marc_s 26 October 2017 в 19:14
поделиться

На некоторых базах данных (особенно Oracle) порядок соединений может иметь огромное значение к производительности запросов (если существует больше чем две таблицы). На одном приложении у нас было буквально два различия в порядках величины в некоторых случаях. Используя внутреннее объединение синтаксис дает Вам контроль над этим - при использовании правильного синтаксиса подсказок.

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

2
ответ дан Leigh Caldwell 26 October 2017 в 19:14
поделиться

мудрая Производительность, они - точно то же (по крайней мере, в SQL Server), но знать, что они удерживают от использования этот синтаксис соединения и это не поддерживается sql server2005 из поля.

я думаю, что Вы думаете об устаревшем * = и = * операторы по сравнению с "внешним объединением".

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

4
ответ дан Joshdan 26 October 2017 в 19:14
поделиться

Как Leigh Caldwell заявил, оптимизатор запросов может произвести различные планы запросов на основе того, что функционально похоже на тот же SQL-оператор. Для дополнительных материалов для чтения на этом взгляните на следующие два postings:-

блога Одна регистрация от Команды Оптимизатора Oracle

Другая регистрация из блога

"Структурированных данных", я надеюсь, что Вы находите это интересным.

1
ответ дан Mike McAllister 26 October 2017 в 19:14
поделиться

Второй синтаксис имеет нежелательную возможность перекрестного объединения: можно добавить таблицы к ОТ части без соответствующего оператора Where. Это считают вредным.

34
ответ дан edosoft 26 October 2017 в 19:14
поделиться
Другие вопросы по тегам:

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