Как заставить MS SQL Server выполнить соединение по индексу? - PullRequest
3 голосов
/ 11 марта 2009

Я работаю над заданием, в котором я должен сравнивать различные методы соединения в SQL Server, а именно: hash-join, merge-join и index-join.

У меня проблемы с получением SQL Server для выполнения индексного соединения. Может кто-нибудь показать мне, как я могу заставить его использовать индексное соединение (используя подсказку соединения или подобное), или просто предоставить простой запрос с объединением, для которого SQL-сервер использует метод индексного соединения?

Ответы [ 3 ]

5 голосов
/ 11 марта 2009

У вас есть Соединения циклов, хэшей и слияний (BOL) . Индекс не присоединяется.

Более чем когда-либо вам нужно было знать, Серия Крейга Фридмана о JOINs (он один из команды, которая разработала механизм отношений для SQL Server)

1 голос
/ 11 марта 2009

У вас может быть подсказка 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); 
0 голосов
/ 11 марта 2009

У меня проблемы с поиском такой терминологии в SQL-сервере.

http://en.wikipedia.org/wiki/Join_(SQL)#Join_algorithms

Вы просто ищете вложенный цикл, который использует индексы, что приводит к поиску по индексу?

...