Имя: Пароль:
IT
Админ
Postgres 9.6. Индекс полнотекстового поиска не действует.
0 GANR
 
02.03.20
16:08
Тестирование выявило медленный запрос к большой таблице. Поле data имеет тип JSONB, id – bigint.

SELECT * FROM svjul svjul
WHERE to_tsvector('russian', (svjul.data)::TEXT) @@ to_tsquery('russian', '55555:*')  
ORDER BY svjul.id ASC LIMIT 20 OFFSET 0

По таблице построен индекс, но он не действует

CREATE INDEX dict_svjul_to_tsvector_idx
    ON public.svjul USING gin
    (to_tsvector('russian'::regconfig, data::text))
    TABLESPACE pg_default;

Выяснил, что без ORDER BY svjul.id ASC индекс срабатывает. Попробовал сделать так

CREATE INDEX idx_svjul_to_tsvector_id
    ON public.svjul USING gin
    (to_tsvector('russian'::regconfig, data::text), id)
    TABLESPACE pg_default;

СУБД ругается, что gin по bigint нельзя строить

Как можно построить индекс, чтобы исходный запрос с ORDER BY svjul.id ASC работал быстро?
1 GANR
 
22.03.20
12:54
В итоге вылечил увеличив статистику.