Как заставить MS SQL Server выполнить индексное соединение?
Я работаю над заданием, в котором я должен сравнить различные методы соединения в SQL Server, а именно: hash-join, merge-join и index-join.
У меня проблемы с получением SQL Server для выполнения индексного соединения. Может кто-нибудь показать мне, как я могу заставить его использовать индексное соединение (используя подсказку о присоединении или подобное), или просто предоставить простой запрос с объединением, в котором сервер SQL использует метод индексного соединения?
3 ответа
У вас есть только Loop, hash и merge join (BOL). Нет индекса присоединяется.
Больше, чем вам когда-либо нужно было знать, серия Крейга Фридмана о JOINs (он один из команды, которая разработала механизм отношений для SQL Server)
У вас может быть подсказка Index для прямого выбора, но я не уверен, что тот же синтаксис доступен для объединения.
SELECT blah FROM table WITH (INDEX (index_name))
Вы можете использовать это в неанси (?) соединении
SELECT blah FROM TABLE1, TABLE2
WHERE TABLE2.ForiegnKeyID = TABLE1.ID
WITH (INDEX (index_name))
Присоединиться с указанием индекса:
SELECT
ticket.ticket_id
FROM
purchased_tickets
JOIN ticket WITH (INDEX ( ticket_ix3))
ON ticket.original_ticket_id = purchased_tickets.ticket_id
AND ticket.paid_for = 1
AND ticket.punched = 0
WHERE purchased_tickets.seller_id = @current_user
OPTION (KEEPFIXED PLAN);
У меня проблемы с поиском такой терминологии в SQL-сервере.
http://en.wikipedia.org/wiki/Join_(SQL)
Вы просто ищете вложенный цикл, который использует индексы, что приводит к поиску индекса?