среда, 18 апреля 2012 г.

LEFT JOIN vs IN

Когда нужно исключить данные в выборке по условию, то зачастую используют ключевое слово IN. Но мало кто знает что это не вызывает проблем только на небольших порциях данных. План выполнения IN не отличается от LEFT JOIN на небольших порциях, но кардинально отличается на больших. И IN начинает жутко тормозить.

Можно:
WHERE id NOT IN ('T', 'C')
короткая коллекция

Не следует:
WHERE id NOT IN ( SELECT id FROM table (NOLOCK))
table может быть сколь угодно большим

Следует:
SELECT s.id FROM source s (NOLOCK)
LEFT OUTER JOIN table t (NOLOCK) on t.id=s.id
WHERE t.id IS NULL


Комментариев нет:

Отправить комментарий