Server'е? :D
Есть две таблицы, джойню их по ключу. В левой табличке заведомо по условию нет строк, соответственно и джойнить нечего, однако estimated number of rows не нулевой и по какой-то причине, он также не нулевой в правой табличке (хотя по идее, надо ведь сначала найти айдишники в левой, а потом по ним искать в правой)
в итоге, если во временную таблицу вытащить айдишники из левой таблицы, а потом заджойнить на правую - то все гуд. А если сразу - то сразу cost у вычисления правой таблицы безумно огромный и жизнь боль. Что я делаю не так? Может как-то не так читаю план?
Что значит заведомо по условию нет строк? Проверь статистику по той колонке или индексу по которому у тебя условие но основе этой статистике и формируется эстимейтед и там можно увидеть будет попадает ли твое значение в какой либо диапазон
Мартин, Грабер "Введение в SQL" Читать до просветления. В чате это бессмысленно рассказывать.
В левой табличке заведомо по условию нет строк, соответственно и джойнить нечего, Но при составлении плана-то это неизвестно... однако estimated number of rows не нулевой и по какой-то причине, Потому что это ОЦЕНКА кол-ва строк, она неточная. Кроме того, ни один оптимизатор даже если знает точно что там строк соответствующих нет, не будет ставить оценку 0, минимум там будет 1. Потому что это число нужно не для подсчёта кол-ва строк а как коэффициент в оценсе стоимости выполения блока плана
(хотя по идее, надо ведь сначала найти айдишники в левой, а потом по ним искать в правой) Это кто тебе сказал? левой таблицы, а потом заджойнить на правую - то все гуд. -- ГЫ ... Давай использовать правильные формулировки. "ТЕБЕ КАЖЕТСЯ, ЧТО ВСЁ ГУД". да, ты как-то не так читаешь план Да и вооще у тебя там ни одного JOIN нет, какого чёрта спрашивать было?
Обсуждают сегодня