【问题标题】:indexing two varchar columns for query with String concatenation使用字符串连接索引两个 varchar 列以进行查询
【发布时间】:2015-01-20 15:42:06
【问题描述】:

我在 postgres 表中有两个 varchar 列 A 和 B,行数超过 1 000 000 行。我想使用 String concatenation SELECT * from table WHERE A||B like 'string%' 进行查询。如何创建可以加快此查询的索引?我尝试为两列创建单独的索引或索引,但我不适用于查询。

【问题讨论】:

  • 你不能调整搜索字符串而不是列以只使用一列吗?你有什么样的数据?
  • 我知道,最好避免这样的查询,但我没有邀请这个查询,这是别人的查询:-( .

标签: database postgresql indexing


【解决方案1】:

这应该会有所帮助:

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

注意varchar_pattern_ops 参数。这是为了使索引可用于LIKE 查询。

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

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

【讨论】:

  • 非常感谢,有了这个索引就可以了。如果没有索引,postgres 在表上进行 Seq Scan 的成本很高。创建索引后,使用位图堆扫描进行查询。成本仅为无索引成本的三分之一。非常好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 2022-01-15
  • 2022-01-08
  • 2018-08-23
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
相关资源
最近更新 更多