Xaip
@Xaip

Почему поиск по триграммам работает так медленно?

Есть таблица с адресами. Использую GIN индекс для неточного поиска по адресам. Но отклик невероятно медленный при 300к записей поиск по адресу может занимать от 3-6секунд.
База крутится на ssd.

Пример запроса:
EXPLAIN ANALYSE SELECT *, similarity(title, 'г. Санкт-Петербург') FROM addresses
            WHERE title % 'г. Санкт-Петербург' ORDER BY similarity DESC limit 5;

Ответ
Limit  (cost=3114.58..3114.59 rows=5 width=189) (actual time=2952.433..2952.434 rows=5 loops=1)
  ->  Sort  (cost=3114.58..3115.54 rows=383 width=189) (actual time=2952.432..2952.432 rows=5 loops=1)
"        Sort Key: (similarity(title, 'г. Санкт-Петербург'::text)) DESC"
        Sort Method: top-N heapsort  Memory: 26kB
        ->  Bitmap Heap Scan on addresses  (cost=1810.97..3108.22 rows=383 width=189) (actual time=73.699..2911.092 rows=132305 loops=1)
              Recheck Cond: (title % 'г. Санкт-Петербург'::text)
              Rows Removed by Index Recheck: 5930
              Heap Blocks: exact=4599
              ->  Bitmap Index Scan on title_trgm_idx  (cost=0.00..1810.87 rows=383 width=0) (actual time=73.013..73.013 rows=138235 loops=1)
                    Index Cond: (title % 'г. Санкт-Петербург'::text)
Planning time: 0.105 ms
Execution time: 2952.466 ms

Подскажите как оптимизировать запрос.
  • Вопрос задан
  • 85 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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