172 похожих чатов

Можно ли как-то упростить представление user_id, count(user_id) group by user_id?

Запрос выполняется очень медленно

17 ответов

13 просмотров

https://t.me/pgsql/288632

Dmitry-Chexkh Автор вопроса
Михаил Шурутов
https://t.me/pgsql/288632

А нужен ли индекс в данный момент? Чтобы делать селект по user_id? Но он мне тут не нужен, я же вытаскиваю всё view

Dmitry Chexkh
А нужен ли индекс в данный момент? Чтобы делать с...

Но этого-то Вы тоже не написали. В общем, если действительно нужна помощь по производительности, лучше показывать всё это сразу.

Dmitry-Chexkh Автор вопроса
Yaroslav Schekin
Но этого-то Вы тоже не написали. В общем, если дей...

Есть у меня view CREATE OR REPLACE VIEW public.contacts_count AS SELECT contacts.user_id, count(contacts.user_id) AS count FROM contacts WHERE contacts.contact_origin::text = 'Authentic'::text GROUP BY contacts.user_id; И на этот view я шлю запрос select (*) from contacts_count, вот этот запрос выполняется очень долго

Dmitry Chexkh
Есть у меня view CREATE OR REPLACE VIEW public.co...

Ещё раз, покажите всё запрошенное, иначе Вы просто впустую тратите время, понимаете?

Dmitry-Chexkh Автор вопроса
Yaroslav Schekin
Ещё раз, покажите всё запрошенное, иначе Вы просто...

Имеете в виду, что я должен показать еще explain (analyze, buffers)?

Dmitry-Chexkh Автор вопроса
Yaroslav Schekin
Всё перечисленное в https://t.me/pgsql/288632

Ага, благодар. Дождусь результатов explain

Dmitry-Chexkh Автор вопроса
Yaroslav Schekin
Всё перечисленное в https://t.me/pgsql/288632

Есть у меня view CREATE OR REPLACE VIEW public.contacts_count AS SELECT contacts.user_id, count(contacts.user_id) AS count FROM contacts WHERE contacts.contact_origin::text = 'Authentic'::text GROUP BY contacts.user_id; И на этот view я шлю запрос select (*) from contacts_count, вот этот запрос выполняется очень долго Вот експлейн https://explain.depesz.com/s/InfQ - это на локале PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit на локале На проде PostgreSQL 11.6 (Ubuntu 11.6-1.pgdg18.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit

Dmitry-Chexkh Автор вопроса
Dmitry Chexkh
Так, а это что?

Метакоманда psql для вывода описания объекта (таблицы, на которой основан view, в данном случае): \d contacts Покажите результат.

Dmitry-Chexkh Автор вопроса
Yaroslav Schekin
Метакоманда psql для вывода описания объекта (табл...

Это в консоле прописывать? Или вот этот результат нужен? CREATE TABLE public.contacts ( id bigserial NOT NULL, user_id int8 NOT NULL, phone_number varchar NULL, country_code varchar NULL, contact_name varchar NULL, email varchar NULL, company varchar NULL, job_title varchar NULL, account_name varchar NULL, contact_group int4 NULL, created_at timestamp NULL, updated_times int8 NOT NULL DEFAULT 0, contact_origin varchar NULL, CONSTRAINT contacts_pk PRIMARY KEY (id), CONSTRAINT contacts_un UNIQUE (user_id, phone_number, country_code) ); CREATE UNIQUE INDEX contacts_id_uindex ON public.contacts USING btree (id); CREATE INDEX contacts_phone_number_country_code_idx ON public.contacts USING btree (phone_number, country_code);

Dmitry Chexkh
Это в консоле прописывать? Или вот этот результат ...

Это "прописывать" в psql. Это единственный "официальный" клиент, а откуда Вы берёте вот это вот, я не знаю (бывает, что другие GUI / клиенты выдают DDL не полностью или перевирают его). ;) А так, по плану — таблица в основном считывается с диска (или, по крайней мере, из кеша FS — PostgreSQL не различает, откуда), и это 6 GB, и почти у всех записей contact_origin = 'Authentic' (кстати, использовали бы Вы text вместо varchar, по-хорошему). Поэтому тут всё зависит от производительности диска или наличия достаточного кол-ва RAM (и настроек сервера PostgreSQL и OS, соответственно). В принципе, запрос можно попробовать ускорить, создав какой-то (один) из этих индексов (со вторым быстрее, но он подходит только для этого запроса, практически): CREATE INDEX ON contacts(contact_origin, user_id); CREATE INDEX ON contacts(user_id) WHERE contact_origin = 'Authentic'; И да, зачем Вы используете COUNT(contacts.user_id), когда user_id int8 NOT NULL? Достаточно COUNT(*).

Dmitry-Chexkh Автор вопроса
Yaroslav Schekin
Это "прописывать" в psql. Это единственный "официа...

А почему planning time так сильно отличается от execution time? Потому что у меня постгрес развернут в докере, это проблема на локале такого долгого запроса?

Dmitry Chexkh
А почему planning time так сильно отличается от ex...

Потому что и должно? ;) Это совершенно разные вещи, если что.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта