Какие шаги следуют за движком sql для выполнения запроса .. ?? - PullRequest
9 голосов
/ 08 мая 2009

Мой вопрос не в том, как использовать внутреннее соединение в SQL. Я знаю о том, как это совпадает между таблицей a и таблицей b.

Я хотел бы спросить, как внутренняя работа внутренней работы. Какой алгоритм это предполагает? Что происходит внутри при объединении нескольких таблиц?

Ответы [ 7 ]

2 голосов
/ 08 мая 2009

Это зависит от того, какую базу данных вы используете, к чему вы присоединяетесь (большой / маленький, в последовательности / случайный, индексированный / неиндексированный и т. Д.).

Например, SQL Server имеет несколько различных алгоритмов соединения; Соединение циклов, объединение объединений, объединение хешей. Какой из них используется, определяется оптимизатором при разработке плана выполнения. Иногда это приводит к неправильному суждению, и затем вы можете принудительно использовать определенный алгоритм объединения, используя подсказки объединения.

Вам могут понравиться следующие страницы MSDN:
http://msdn.microsoft.com/en-us/library/ms191318.aspx (петля)
http://msdn.microsoft.com/en-us/library/ms189313.aspx (хэш)
http://msdn.microsoft.com/en-us/library/ms190967.aspx (объединение)
http://msdn.microsoft.com/en-us/library/ms173815.aspx (подсказки)

2 голосов
/ 08 мая 2009

В MS Sql разные алгоритмы соединения будут использоваться в разных ситуациях в зависимости от таблиц (их размера, каких индексов и т. Д.). Я полагаю, другие движки БД также используют различные алгоритмы.

Основные типы объединения, используемые г-жой Sql:
- Вложенные циклы присоединяются
- Объединение объединяет
- хэш присоединяется

Подробнее о них вы можете узнать на этой странице: Msdn -Advanced Query Tuning Concepts

Если вы получите SQL для отображения «плана выполнения» для ваших запросов, вы сможете увидеть, какой тип объединения используется в различных ситуациях.

2 голосов
/ 08 мая 2009

Существуют разные алгоритмы, в зависимости от сервера БД, индексов и порядка данных (кластеризованный PK), независимо от того, объединяются ли вычисленные значения и т. Д.

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

0 голосов
/ 08 мая 2009

Оптимизатор выберет (или должен) выбрать самый быстрый алгоритм соединения.

Однако есть два разных типа определения того, что быстро:

  1. Вы измеряете время, необходимое для возврата всех соединенных строк.
  2. Вы измеряете время, необходимое для возврата первых соединенных строк.

Если вы хотите вернуть все строки как можно быстрее, оптимизатор часто выбирает хеш-соединение или соединение слиянием. Если вы хотите вернуть первые несколько строк как можно быстрее, оптимизатор выберет соединение с вложенными циклами.

0 голосов
/ 08 мая 2009

Вся теория множеств, основанная некоторое время назад. Старайтесь не связывать слишком много таблиц за один раз, кажется, что ресурсы сканирования базы данных не совпадают. Индексы помогают с производительностью, посмотрите на некоторые сайты SQL и поиск по оптимизации запросов SQL, чтобы получить некоторое представление. В SQL Management Studio есть встроенная утилита для плана выполнения, которая часто интересна, особенно для больших сложных запросов.

0 голосов
/ 08 мая 2009

Создает декартово произведение двух таблиц и затем выбирает из него строки. Читайте книгу Корта о базах данных для того же.

0 голосов
/ 08 мая 2009

В этом случае вы должны увидеть, как сохранять данные в b-дереве после него, я думаю, вы поймете алгоритм JOIN.

...