【发布时间】:2019-05-18 14:31:30
【问题描述】:
考虑如下表
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)
根据 Postgres 的 EXPLAIN 结果,只有 b 和 c 正在使用索引。 LIKE 'a%' 似乎只适用于单列索引。
那么,如何提高上述查询的查询速度呢?
【问题讨论】:
-
请edit您的问题并添加使用
explain (analyze, buffers)生成的execution plan(不是只是一个“简单”解释)。 Formatted text 请no screen shots 或将计划上传到explain.depesz.com -
SHOW lc_collate能得到什么?
标签: sql postgresql sql-like database-indexes