索引两个 varchar 列以使用字符串连接进行查询

indexing two varchar columns for query with String concatenation

我在 postgres table 中有两个 varchar 列 A 和 B,行数超过 1 000 000 行。我想使用 SELECT * from table WHERE A||B like 'string%' 进行查询。我如何创建一个索引来加速这个查询?我尝试为两列创建单独的索引或索引,但我无法用于查询。

这应该有帮助:

create index on the_table ((a||b) varchar_pattern_ops);

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

您的查询必须完全使用索引中使用的相同表达式 (a||b),否则永远不会使用。条件也必须具有足够的选择性以保证索引的使用。如果您的查询要 return table 中相当大比例的行,则使用索引可能没有意义。如果您的条件只有 return 几千行,优化器可能会使用它。

创建索引后别忘了运行analyze