Size: a a a

pgsql – PostgreSQL

2020 August 04

XN

Xeon Null in pgsql – PostgreSQL
а этот номер привязан только к компании 49
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Xeon Null
тут кстати ошибка если убрать фильтр по company_id из самого вложенного запроса
Да, если. В Вашем примере запроса он есть. ;)
Добавьте PARTITION BY, если этого фильтра нет, конечно.
источник

XN

Xeon Null in pgsql – PostgreSQL
Yaroslav Schekin
Да, если. В Вашем примере запроса он есть. ;)
Добавьте PARTITION BY, если этого фильтра нет, конечно.
да, согласен, немного не корректно написал запрос в начале)
источник

XN

Xeon Null in pgsql – PostgreSQL
first_value(number) OVER (PARTITION BY company_id ORDER BY created_at DESC) AS last_number
так правильно?
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Xeon Null
first_value(number) OVER (PARTITION BY company_id ORDER BY created_at DESC) AS last_number
так правильно?
С виду, да. Да и Вы же всё равно тестировать будете. :)
источник

XN

Xeon Null in pgsql – PostgreSQL
Yaroslav Schekin
С виду, да. Да и Вы же всё равно тестировать будете. :)
спасибо)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Xeon Null
спасибо)
Да не за что! ;)
Кроме упомянутых стандартных способов есть ещё вот такая штука, кстати (если подобное часто нужно и хочется, чтобы запросы были попроще / поэффективнее): https://wiki.postgresql.org/wiki/First/last_(aggregate)
С ней тот же запрос будет выглядеть как-то так:
SELECT COUNT(*) AS cnt, company_id, first(number ORDER BY created_at DESC) AS last_number
 FROM "order"
WHERE status = 20 AND company_id = 119
GROUP BY company_id;

Короче/понятнее, IMHO.
источник

XN

Xeon Null in pgsql – PostgreSQL
Yaroslav Schekin
Да не за что! ;)
Кроме упомянутых стандартных способов есть ещё вот такая штука, кстати (если подобное часто нужно и хочется, чтобы запросы были попроще / поэффективнее): https://wiki.postgresql.org/wiki/First/last_(aggregate)
С ней тот же запрос будет выглядеть как-то так:
SELECT COUNT(*) AS cnt, company_id, first(number ORDER BY created_at DESC) AS last_number
 FROM "order"
WHERE status = 20 AND company_id = 119
GROUP BY company_id;

Короче/понятнее, IMHO.
еще есть вопрос, при какой цене стоит задумываться об оптимизации?) я про explain
источник

l

lnuynxa in pgsql – PostgreSQL
Xeon Null
еще есть вопрос, при какой цене стоит задумываться об оптимизации?) я про explain
Когда запрос не устраивает по времени выполнения
источник

XN

Xeon Null in pgsql – PostgreSQL
lnuynxa
Когда запрос не устраивает по времени выполнения
логично)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Xeon Null
еще есть вопрос, при какой цене стоит задумываться об оптимизации?) я про explain
Вы про cost-ы в EXPLAIN? Они вообще ничего не значат, это "попугаи".
А так — я лично за KISS / when it hurts. ;)
источник

XN

Xeon Null in pgsql – PostgreSQL
Yaroslav Schekin
Да не за что! ;)
Кроме упомянутых стандартных способов есть ещё вот такая штука, кстати (если подобное часто нужно и хочется, чтобы запросы были попроще / поэффективнее): https://wiki.postgresql.org/wiki/First/last_(aggregate)
С ней тот же запрос будет выглядеть как-то так:
SELECT COUNT(*) AS cnt, company_id, first(number ORDER BY created_at DESC) AS last_number
 FROM "order"
WHERE status = 20 AND company_id = 119
GROUP BY company_id;

Короче/понятнее, IMHO.
не находит first
источник

XN

Xeon Null in pgsql – PostgreSQL
ERROR: function first(character varying) does not exist
источник

XN

Xeon Null in pgsql – PostgreSQL
PostgreSQL 12.3 (Ubuntu 12.3-1.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64-bit
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Xeon Null
не находит first
Потому что Вы её не создали, наверное? Вы ссылку прочитали, а? ;)
источник

IC

Igor Chizhov in pgsql – PostgreSQL
Yaroslav Schekin
Вы про cost-ы в EXPLAIN? Они вообще ничего не значат, это "попугаи".
А так — я лично за KISS / when it hurts. ;)
Я не так долго и не очень много работаю с PostgreSQL, но косты меня сильно удивляют после MS. Там хоть как-то ориентироваться можно.
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Igor Chizhov
Я не так долго и не очень много работаю с PostgreSQL, но косты меня сильно удивляют после MS. Там хоть как-то ориентироваться можно.
"Как-то" можно и здесь. Но сам принцип в MS SQL ровно тот же — это "попугаи".
источник

IC

Igor Chizhov in pgsql – PostgreSQL
Принцип - да. Но вот в вышеописанной ситуации с подзапросом и джойном косты отличались процентов на 30%, а по факту минута против 1 часа +. Попугаи МС-а кажутся более породистыми и предсказуемыми 😁
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Igor Chizhov
Принцип - да. Но вот в вышеописанной ситуации с подзапросом и джойном косты отличались процентов на 30%, а по факту минута против 1 часа +. Попугаи МС-а кажутся более породистыми и предсказуемыми 😁
А оценки rows были правильные (хоть примерно)? Если нет — то и cost-ы "поедут", конечно (это в любом планировщике).
И, во-вторых, правильные настройки (tuning) costs в PostgreSQL (под "железо" и нагрузку) — это Ваша проблема (но и возможность), в отличие от. ;)
См. http://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server
источник

IC

Igor Chizhov in pgsql – PostgreSQL
Да, статистика на месте, оценки правильные. Настройки, к счастью, не моя проблема, сервера у клиента, админы там же. Но склонен согласиться, так как на дев и прод средах попугаи сильно различаются при схожих данных. При случае надо будет подискутировать с админами.
источник