Рассматривая таблицу, как показано ниже
CREATE TABLE test (
"a" varchar(32),
"b" varchar(32),
"c" varchar(32),
"d" varchar(32)
);
CREATE INDEX "test_index" ON test USING btree("a", "b", "c");
Мне нужно выполнить запросы, такие как
SELECT count(*)
FROM test
WHERE a like 'a%'
and b = 'b'
and c = 'c'
Результат EXPLAIN показан ниже
Aggregate (cost=10.36..10.37 rows=1 width=0)
-> Index Only Scan using test_index on test (cost=0.14..10.36 rows=1 width=0)
Index Cond: ((b = 'b'::text) AND (c = 'c'::text))
Filter: ((a)::text ~~ 'a%'::text)
На основе EXPLAINВ результате Postgres только b
и c
используют индекс.Кажется, LIKE 'a%'
работает только с одним столбцом индекса.
Итак, как увеличить скорость запроса для вышеупомянутого запроса?