Методы визуализации соединений - PullRequest
6 голосов
/ 31 июля 2010

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

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

Ответы [ 4 ]

2 голосов
/ 31 июля 2010

Всегда помни о конце.

  1. Определите, какие столбцы вам нужны

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

  3. Напишите свою часть FROM с таблицей, которая даст максимальное количество столбцов. например, из команд T

  4. Добавить каждое соединение по одному на новой строке. Убедитесь, что вам нужно НАРУЖНОЕ, ВНУТРЕННЕЕ, ЛЕВОЕ, ПРАВОЕ СОЕДИНЕНИЕ на каждом этапе.

Обычно у меня работает. Имейте в виду, что это структурированный язык запросов. Всегда разбивайте запрос на логические строки, и это намного проще.

1 голос
/ 31 июля 2010

Каждое объединение объединяет два набора результатов в один. Каждый из них может быть из одной таблицы базы данных или временного набора результатов, который является результатом предыдущего объединения или подзапроса.
Всегда знайте порядок, в котором обрабатываются объединения, и для каждого объединения знайте природу двух временных наборов результатов, которые вы объединяете. Знать, какой логический объект представляет каждая строка в этом наборе результатов, и какие атрибуты в этом наборе однозначно идентифицируют этот объект. Если ваше объединение предназначено для того, чтобы всегда объединять одну строку в одну строку, эти ключевые атрибуты являются теми, которые вам нужно использовать (в условиях объединения) для реализации объединения. Если ваше объединение предназначено для генерирования какого-либо декартового произведения, то важно понять вышеизложенное, чтобы понять, как условия объединения (какими бы они ни были) влияют на количество элементов нового объединенного набора результатов.

Старайтесь быть последовательными в использовании внешних направлений соединения. Я стараюсь всегда использовать левые соединения, когда мне нужно внешнее соединение, так как я «думаю» о каждом соединении как о «соединении» новой таблицы (справа) со всем, что я уже соединил (слева) от левого соединения заявление ...

0 голосов
/ 31 июля 2010

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

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

Кроме того, если вас беспокоит эффективность, то SQL Server Management Studio 2005 или более поздней версии позволяет получать приблизительные планы выполнения запросов без их фактического выполнения. Это может дать вам очень хорошее представление о том, где возникают проблемы, если вы используете MS SQL Server.

0 голосов
/ 31 июля 2010

Запустите план объяснения.

Это всегда иерархические деревья (чтобы сделать это , сначала я должен сделать , что ).Существует множество инструментов для превращения этих планов в графические деревья, некоторые в браузерах SQL (например, Oracle SQLDeveloper, как называется клиент GUI SQlServer).Если у вас нет инструмента, большая часть выходного текста плана включает столбец «глубины», который можно использовать для отступа строки.

То, что вы хотите найти, - это cost .каждого ряда.(Обратите внимание, что для Oracle более высокие затраты могут означать меньшее время, если это позволяет Oracle выполнять хэш-соединение, а не вложенные циклы, и , если конечный набор результатов имеет большую мощность(много, много строк).)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...