使用字符串连接为查询索引两个 varchar 列

0 database postgresql indexing

我在 postgres 表中有两个 varchar 列 A 和 B,有超过 1 000 000 行。我想使用字符串连接 SELECT * from table WHERE A||B 进行查询,例如 'string%' 。我如何制作一个可以加速这个查询的索引?我尝试为两列创建单独的索引或索引,但我不适用于查询。

a_h*_*ame 5

这应该有帮助:

create index on the_table ((a||b) varchar_pattern_ops);
Run Code Online (Sandbox Code Playgroud)

注意varchar_pattern_ops参数。这是使索引可用于LIKE查询所必需的。

您的查询必须使用与索引中使用的完全相同的表达式 ( a||b),否则它将永远不会被使用。条件也必须具有足够的选择性以保证索引的使用。如果您的查询将返回表中很大一部分行,则使用索引可能没有意义。如果您的条件仅返回几千行,则优化器可能会使用它。

不要忘记analyze在创建索引后运行。