Вот хороший (слишком упрощенный) пример постановки:
Допустим, вы хотели найти всех людей с высоким риском в вашем городе (возможно, вам будет интересно). У вас есть телефонная компания дБ (национальная), проиндексированная по штату, городу, фамилии, имени, адресу и ФБР дБ (глобальная), проиндексированная по фамилии, имени, стране, региону, адресу. Допустим, в базе данных ФБР есть несколько записей для каждого человека из-за нескольких прошлых адресов.
Вы можете объединить два дБ на общих элементах и затем квалифицировать свои критерии. Или же...
Выберите RecordID с телефона как P1
Где State = 'MyState' и City = 'MyCity' и
существует (выберите 1
От TheMan как M1
Где M1.Last = P1.Last и M1.First = P1.First и M1.Risk> 80)
Теперь у меня есть небольшой набор записей для квалификации и небольшой набор результатов для работы. Оттуда я могу пойти получить детали. Это хороший кандидат на CTE, и я мог бы пробить дюжину дыр в логике, но это иллюстрирует концепцию. Если вы введете M1.Risk (неиндексированное поле) в уравнение с полным объединением, вы заставляете SQL Server планировать его в определенных ситуациях. Не обязательно здесь, но поскольку ваша логика становится более сложной, и в игру вступают последующие неиндексированные критерии.