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 фактически немного больше работы, потому что он должен сканировать больше строк, прежде чем будет достигнут предел, хотя разница во времени не заметна.