tgoop.com/eshu_coding/255
Create:
Last Update:
Last Update:
Произошло моё первое практическое знакомство с оптимизацией запросов. Нормально пользоваться планом я пока не научился, но первый медленный запрос к базе успешно оптимизирован.
Делал я полнотекстовый поиск в базе проекта #палантир@eshu_coding, приправленный дополнительным параметром: id юзера или канала, по которому осуществляется поиск. Эти поля у меня проиндексированы индексом hash, потому выборка записей по конкретным значениям этих полей мгновенная. Полнотекстовый поиск же штука относительно медленная.
Запрос вида
select * from messages where full_text_req @@ post_text and chat_id = id;
где @@ , грубо говоря, оператор соответствия текста запросу, на всей базе выполняется секунд 20.
Судя по всему, Postgres проверяет все записи на соответствие запросу, а затем уже применяет фильтр по id.
Для ускорения запроса мне на помощь пришли Common Table Expressions (CTE). Суть их - в поэтапном выполнении сложного запроса. Если переписать запрос с использованием CTE, скорость выполнения становится стабильно около 300 мс.
Переписанный запрос:
with sel as (select * from messages where chat_id = id) select * from sel where text @@ full_text_request;
#кодинг
#postgresql
BY Эшу быдлокодит
Share with your friend now:
tgoop.com/eshu_coding/255