Postgresql pg_trgm ускорить, где условия

Я использую расширение pg_trgm, чтобы проверить сходство текстового столбца. Я хочу ускорить его, используя дополнительные условия, но безуспешно. Скорость такая же. Вот мой пример:

    create table test (
    id serial,
    descr text,
    yesno text,
    truefalse boolean
    );
    insert into test SELECT generate_series(1,1000000) AS id, 
md5(random()::text) AS descr ; 
    update test set yesno = 'yes' where id < 500000;
    update test set yesno = 'no' where id > 499999;
    update test set truefalse = true where id < 100000;
    update test set truefalse = false where id > 99999;
    CREATE INDEX test_trgm_idx ON test USING gist (descr gist_trgm_ops);

Поэтому, когда я выполняю запрос, нет разницы, использую ли я условие where.

 select descr <->  '65c141ee1fdeb269d2e393cb1d3e1c09' 
 as dist, descr, yesno, truefalse from test 
   where 
   yesno = 'yes'
   and 
   truefalse = true 
order by dist 
limit 10;

Это правильно?

1 ответ

После создания тестовых данных выполните АНАЛИЗ, чтобы убедиться, что статистика обновляется. Тогда вы можете использовать EXPLAIN, чтобы узнать.

На моей машине он выполняет сканирование индекса для test_trgm_idx, чтобы сканировать строки по порядку, чтобы он мог остановиться при достижении предела. С оператором where фактически немного больше работы, потому что он должен сканировать больше строк, прежде чем будет достигнут предел, хотя разница во времени не заметна.

Другие вопросы по тегам