Методы визуализации соединений

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

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


person wadesworld    schedule 30.07.2010    source источник
comment
Знайте свои данные и свои соединения — codinghorror.com/blog/2007/10/   -  person OMG Ponies    schedule 31.07.2010
comment
@OMGPonies, это лучший ответ на этот вопрос, о котором я думал.   -  person Matthew Jones    schedule 31.07.2010


Ответы (4)


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

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

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

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

  4. Добавляйте каждое соединение по одному на новой строке. Убедитесь, что вам понадобится OUTER, INNER, LEFT, RIGHT JOIN на каждом шаге.

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

person Hari Menon    schedule 30.07.2010

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

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

person Charles Bretana    schedule 30.07.2010

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

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

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

person tpdi    schedule 30.07.2010

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

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

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

person TimothyAWiseman    schedule 30.07.2010