(основы стоимостной оптимизации), но все же...
Есть ли какое-то общее правило как делать semi join? Вроде для этого есть exists, но на моей практике часто быстрее работал select * from t1 where (select count(*) from t2 where t1.rn = t2.prn and rownum = 1) > 0
Или для каждого запроса надо просто смотреть как быстрее будет работать?
ну вот вы планы со статистикой научились смотреть?) посмотрите план на exists, потом на count > 0, сравните статистики... это приблизит к ответу почему один быстрее чем другой (если он действительно быстрее).
Пока сам не понял, научился ли. Ну т.е. результат то вывел, но.. :) Комп работой утащили куда-то, а локальной базой чёт не обзаведусь никак. Надеюсь завтра решу вопрос и гляну)
Это не будет быстрее, чем exists. Exists позволяет разные планы, а это фигня с count только фильтр
Да вот как раз сейчас читаю и думаю что что-то не сходится. Завтра найду пару мест где, как мне казалось, count дал выйгрыш по скорости. Посмотрю планы...
Обсуждают сегодня