COALESCE в Postgres - это функция, которая возвращает первый параметр, отличный от NULL. Поэтому я использовал coalesce в подзапросах, таких как:
SELECT COALESCE (
( SELECT * FROM users WHERE... ORDER BY ...),
( SELECT * FROM users WHERE... ORDER BY ...),
( SELECT * FROM users WHERE... ORDER BY ...),
( SELECT * FROM users WHERE... ORDER BY ...)
);
Я изменяю где в любом запросе, и они содержат много параметров и CASE, а также различные предложения ORDER BY. Это потому, что я всегда хочу что-то вернуть, но с указанием приоритетов.
Что я заметил при выдаче EXPLAIN ANALYZE
, так это то, что любой запрос выполняется, несмотря на то, что первый фактически возвращает НЕ пустое значение. Я ожидаю, что движок выполнит только первый запрос, а не следующие, если он вернет не ноль.
Таким образом, у меня может быть плохая производительность.
Так что я делаю что-то плохое попрактиковаться и лучше ли выполнять запросы отдельно по соображениям производительности?
РЕДАКТИРОВАТЬ:
Извините вас, где правильно, я не выбираю *, но я выбираю только один столбец. Я не опубликовал свой код, потому что мне не интересен мой запрос, но это общий вопрос c, чтобы понять, как работает двигатель. Поэтому я воспроизвожу очень простую скрипку здесь http://sqlfiddle.com/#! 17 / a8aa7 / 4
Возможно, я ошибаюсь, но я думаю, что она ведет себя так, как я говорил: она запускает все подзапросы, несмотря на первый из них уже возвращает ненулевое значение
РЕДАКТИРОВАТЬ 2: хорошо, я читаю только теперь он говорит, что никогда не выполнялся. Таким образом, два других запроса не выполняются. Меня смутило то, что они были включены в план запроса.
В любом случае, это все еще важно для моего вопроса. Лучше ли выполнять все запросы отдельно по соображениям производительности? Поскольку кажется, что даже если первый возвращает ненулевое значение, два других подзапроса могут снизить производительность