Вложенный SQL присоединяется к процессу требуется объяснение - PullRequest
3 голосов
/ 07 января 2010

Я хочу понять процесс вложенных предложений объединения в SQL-запросах. Можете ли вы объяснить этот пример псевдокодами? (Каков порядок объединения таблиц?)

  FROM 
table1 AS t1 (nolock)
    INNER JOIN table2 AS t2 (nolock)
        INNER JOIN table3 as t3 (nolock)
        ON t2.id = t3.id
    ON t1.mainId = t2.mainId

Ответы [ 3 ]

2 голосов
/ 07 января 2010

В SQl у нас есть три способа объединения двух таблиц.

Nested Loop (Хорошо, если в одной таблице небольшое количество строк), Hash Join (Хорошо, если обе таблицы имеют очень большие строки, это делает дорогостоящее формирование хеша в памяти) Merge Join (Хорошо, когда мы отсортировали данные для присоединения).

Из вашего вопроса кажется, что вы хотите для Nested Loop.

Допустим, t1 имеет 20 строк, t2 имеет 500 строк.

Теперь это будет похоже на

Для каждой строки в t1 Найти строки в t2, где t1.MainId = t2.MainId

Теперь выход этого будет присоединен к t3.

Порядок соединения зависит от Оптимизатора, ожидаемого количества строк и т. Д.

1 голос
/ 07 января 2010

Если вы используете SQL Server Query Analyzer, найдите «Показать План выполнения » в меню «Запрос» и включите его.

1 голос
/ 07 января 2010

Попробуйте EXPLAIN <em>query</em>.

Он точно говорит вам, что происходит. :)

Конечно, это не работает в SQL Server. Для этого вы можете попробовать Razor SQLServer Explain Plan

Или даже SET SHOWPLAN_ALL

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