Size: a a a

pgsql – PostgreSQL

2021 January 29

M

Milkhael in pgsql – PostgreSQL
Yaroslav Schekin
Обычно, когда говорят о пользе индексов, подразумевают обычные (т.е. селективные) запросы, а не чтение всех таблиц.
Из второго возникают, в основном, лишь глупые мифы про "JOIN-ы медленные!!!11111". :)
Да это же просто пример, чтобы чекнуть, имеет ли значение порядок, о котором речь зашла
источник

M

Milkhael in pgsql – PostgreSQL
получается, не так уж “всё равно”
источник

VU

Vadim Ushakov in pgsql – PostgreSQL
Victor Yegorov
SET statement_timeout TO '10s';
А он разве отменится после исполнения одной команды? Вроде же он будет иметь эффект на все последующие запросы которые сервер получит от клиента?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Milkhael
ну не совершенно, но разные
в первом случае расположение колонок в индексе позволяет сливать результаты.
во втором это не прокатывает, но используется IOS.

также, я трактовал ваш изначальный запрос иначе: как будет влиять один и тот же индекс, если в запросе поменять местами колонки. (тут недосморел, конечно).
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Milkhael
Да это же просто пример, чтобы чекнуть, имеет ли значение порядок, о котором речь зашла
И он в основном "мимо" именно по вышеуказанной причине, понимаете?
В одном случае индексы используются... а, уже написали. ;)
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Vadim Ushakov
А он разве отменится после исполнения одной команды? Вроде же он будет иметь эффект на все последующие запросы которые сервер получит от клиента?
тогда заверните запрос в транзакцию и сделайте SET LOCAL …
источник

M

Milkhael in pgsql – PostgreSQL
Yaroslav Schekin
И он в основном "мимо" именно по вышеуказанной причине, понимаете?
В одном случае индексы используются... а, уже написали. ;)
я конечно дико извиняюсь, но я плохо понимаю о чём вы пытаетесь намекнуть
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Milkhael
я конечно дико извиняюсь, но я плохо понимаю о чём вы пытаетесь намекнуть
Написали же выше уже, почему используются индексы в этом примере, и почему разница.
Во втором случае, кстати — тупо чтобы таблицу не читать (т.е. не был бы индекс покрывающим, было бы два seq. scan).

А на практике (когда будут фильтры по таблицам) существенного отличия не получится.
источник

M

Milkhael in pgsql – PostgreSQL
Yaroslav Schekin
Написали же выше уже, почему используются индексы в этом примере, и почему разница.
Во втором случае, кстати — тупо чтобы таблицу не читать (т.е. не был бы индекс покрывающим, было бы два seq. scan).

А на практике (когда будут фильтры по таблицам) существенного отличия не получится.
Изначально же было утверждение, что на порядок колонок всё равно. Это потом только речь зашла про почему.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
тут важно уточнить, что зачастую лучше иметь вот такой “неудобный” индекс, т.к. его задйствуют ещё 2-3 других запроса, чем заводить 2 разных индекса под тот же набор запросов
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Milkhael
Изначально же было утверждение, что на порядок колонок всё равно. Это потом только речь зашла про почему.
Опять-таки, такие утверждения обычно относятся к практическим запросам.
"Творчески" выбирая benchmarks, можно показать "важность" и "преимущество" чего угодно над чем угодно. ;)
источник

VU

Vadim Ushakov in pgsql – PostgreSQL
Victor Yegorov
тогда заверните запрос в транзакцию и сделайте SET LOCAL …
Так а я уже внутри большой транзакции. И если я хочу, чтобы если один из следующих update-ов грохнется, откатить всё, мне нужно будет дополнительно париться с savepoint-ами?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Vadim Ushakov
Так а я уже внутри большой транзакции. И если я хочу, чтобы если один из следующих update-ов грохнется, откатить всё, мне нужно будет дополнительно париться с savepoint-ами?
Если нужно откатить всю транзакцию, то (т.к. timeout — это ошибка), если не было SAVEPOINTs (exceptions в pl/что-нибудь), то она откатится целиком.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Vadim Ushakov
Так а я уже внутри большой транзакции. И если я хочу, чтобы если один из следующих update-ов грохнется, откатить всё, мне нужно будет дополнительно париться с savepoint-ами?
способа только для одно запроса — нет.
- можно сделать SET LOCAL + запрос + RESET сразу после него. но тут нюанс: если в начале транзакции ставили что-то нестандартное, то RESET сбросит до уровня перед транзакцией — надо тестировать
- можно сделать ф-цию с параметром SET statement_timeout = … и давать ей на вход текст запроса, она его исполнит — надо тестировать
источник

M

Milkhael in pgsql – PostgreSQL
Yaroslav Schekin
Опять-таки, такие утверждения обычно относятся к практическим запросам.
"Творчески" выбирая benchmarks, можно показать "важность" и "преимущество" чего угодно над чем угодно. ;)
да нет же. Там контекст был такой, что человек утверждал, что порядок условий в join-е имеет значение. Конечно же не имеет. Вот тут действительно всё равно, как ты творчески не изгаляйся. У меня возник вопрос немного про другой порядок, который я адресовал Виктору и было сказано что тоже всё равно. Как будто также всё равно, как и в случае с порядком условий. Но вышло не так.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Milkhael
да нет же. Там контекст был такой, что человек утверждал, что порядок условий в join-е имеет значение. Конечно же не имеет. Вот тут действительно всё равно, как ты творчески не изгаляйся. У меня возник вопрос немного про другой порядок, который я адресовал Виктору и было сказано что тоже всё равно. Как будто также всё равно, как и в случае с порядком условий. Но вышло не так.
я трактовал ваш запрос как продолжение обсуждения JOIN-ов, ошибочно приняв USING за конструкцию JOIN USING ()
в индексах порядок атрибутов в ключе важен
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Victor Yegorov
способа только для одно запроса — нет.
- можно сделать SET LOCAL + запрос + RESET сразу после него. но тут нюанс: если в начале транзакции ставили что-то нестандартное, то RESET сбросит до уровня перед транзакцией — надо тестировать
- можно сделать ф-цию с параметром SET statement_timeout = … и давать ей на вход текст запроса, она его исполнит — надо тестировать
Почему? Если управлять этим из приложения, то перед нужным запросом сделать SET, а после — RESET, и всё.
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Yaroslav Schekin
Почему? Если управлять этим из приложения, то перед нужным запросом сделать SET, а после — RESET, и всё.
я так понял, что этот вариант не рассматривается…
источник

M

Milkhael in pgsql – PostgreSQL
Victor Yegorov
я трактовал ваш запрос как продолжение обсуждения JOIN-ов, ошибочно приняв USING за конструкцию JOIN USING ()
в индексах порядок атрибутов в ключе важен
Да, я уже понял. Просто пытаюсь Ярославу пояснить)
источник

VU

Vadim Ushakov in pgsql – PostgreSQL
@vyegorov Yaroslav Вообще, действую как раз из приложения, так что можно и рассмотреть.
источник