Итак, у меня есть две таблицы: tableA и tableB.После простого внутреннего объединения этих таблиц
SELECT *
FROM tableA
JOIN tableB
ON tableA.columnA = tableB.id
Теперь tableA
содержит 29000+ строк, тогда как tableB
содержит только 11000+ строк.tableB.id
- это первичный ключ, следовательно, кластеризованный.И существует некластеризованный индекс на columnA
.
По моему мнению, оптимизатор запросов должен обрабатывать tableB
как внутреннюю таблицу при выполнении объединения, поскольку она имеет меньшее количество строк, а tableA
как внешнюю таблицу, как многострок необходимо отфильтровать от tableA
на основе значения столбца tableB.id
.
Но на самом деле происходит полная противоположность этому.По какой-то причине оптимизатор запросов обрабатывает tableA
как внутреннюю таблицу и tableB
как внешнюю таблицу.
Может кто-нибудь объяснить, почему это происходит и какую ошибку я совершаю в своем мыслительном процессе?Кроме того, есть ли способ принудительно заменить решение оптимизатора запросов и предписать ему обрабатывать tableB
как внутреннюю таблицу?Мне просто любопытно посмотреть, как два разных выполнения одного и того же запроса сравниваются друг с другом.Спасибо.