секционированная Декларативно по ключу period_id, вторая обычная
———
Вложенный SELECT возвращает 1но значение 5
———
Разницы в скорости выполнения этих запросов нет ни какой, всё равно сканируются все партиции
———
Если же указать в место вложенного SELECT , IN (5). то выбирается только та партиция которая нужна и время выполнения уже отличается на порядки доли секунды и минуты.
————————
ВОПРОС : Как заставить работать динамическое отсечение партиций во время выполнения запроса ? (В документации написано что это так и работает , на практике нет :( )
покажите ваш explain? обоих запросов, можете сскинуть на https://explain.depesz.com/ и если у вас таблица периодов возрващает только 1но значение то почему бы его не вытащить во from? а вашу таблицу уже обычно join условие периода просто в where и такой вариант покажите explain
Одно значение во вложенном SELECT это частный случай для тестов Нужно добиться динамического отсечения партиций во время выполнения запроса, которое анонсировано в документации Это EXPLAIN запроса к партицированной таблице https://explain.depesz.com/s/wQeQ Это к обычной https://explain.depesz.com/s/nl1dQ Это когда SELECT count(*) FROM subject_position_info spi WHERE spi.period_id IN( 5 ); https://explain.depesz.com/s/4hE2
выдержка из документации Устранение секций может производиться не только при планировании конкретного запроса, но и в процессе его выполнения. Благодаря этому может быть устранено больше секций, когда условные выражения содержат значения, неизвестные во время планирования, например параметры, определённые оператором PREPARE, значения, получаемые из подзапросов, или параметризованные значения во внутренней стороне соединения с вложенным циклом.
SELECT count(*) FROM period p join subject_position_info spi on spi.period_id = p.period_id where p.qarter = 1 and p.year = 2019; попробуйте так, и покажите explain
https://explain.depesz.com/s/C82P Он так же проходится по всем секциям :(
а у вас period - это точно таблица, может вьюха?
Таблица, обычная
выше сообщение
Обсуждают сегодня