Эффективность T-SQL (относительно базовая) - PullRequest
0 голосов
/ 28 декабря 2011

Я чувствую себя немного глупо, спрашивая это, потому что это, вероятно, очень просто.

Select DISTINCT ID from tbl1
    where col2='abc'
            ...
    and ID not in (select distinct tbl2.ID from tbl2 where tbl2.Dtm > '2010-01-01')

Это часть моего upsert в TSQL, поэтому мне нужно снова запустить предложение tbl2 where (я использовал слияниено его нет в этой базе данных).Проблема в том, что в tbl2 миллионы строк, а в tbl1 десятки тысяч.Очевидно, что работать так, как tb1xtbl2, было бы крайне неэффективно.Я думал об использовании курсоров и временных таблиц, но я не вижу, что работа намного лучше?

У кого-нибудь есть другие идеи?

1 Ответ

1 голос
/ 28 декабря 2011

Существует несколько различных способов определения этого типа запроса.

Пожалуйста, создайте запросы с помощью Left Join, Not In и Not Exists и проверьте план выполнения, только тогда вы узнаете, какой из них лучше подходит для вашего случая.

Left Outer Join Way

Select Distinct ID
FROM tbl1 t1
LEFT OUTER JOIN tbl2 on t1.ID = t2.ID and t2.DTM > '2010-01-01'
WHERE
t1.Col2 = 'abc'
AND t2.ID IS NULL

Справка:

Похожие обсуждения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...