Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 为两个varchar列编制索引,以便使用字符串连接进行查询_Database_Postgresql_Indexing - Fatal编程技术网

Database 为两个varchar列编制索引,以便使用字符串连接进行查询

Database 为两个varchar列编制索引,以便使用字符串连接进行查询,database,postgresql,indexing,Database,Postgresql,Indexing,我在postgres表中有两个varchar列A和B,行数超过1000行。我想使用字符串连接从表中选择*进行查询,其中A | | B类似于“字符串%”。我如何制作一个索引来加速这个查询?我尝试为这两列创建单独的索引或索引,但我不适用于查询。这应该有帮助: create index on the_table ((a||b) varchar_pattern_ops); 注意varchar\u pattern\u ops参数。为了使索引可用于类似于的查询,这是必需的 您的查询必须使用与索引中使用的表

我在postgres表中有两个varchar列A和B,行数超过1000行。我想使用字符串连接从表中选择*进行查询,其中A | | B类似于“字符串%”。我如何制作一个索引来加速这个查询?我尝试为这两列创建单独的索引或索引,但我不适用于查询。

这应该有帮助:

create index on the_table ((a||b) varchar_pattern_ops);
注意
varchar\u pattern\u ops
参数。为了使索引可用于类似于的查询,这是必需的

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

创建索引后,不要忘记运行
分析

这应该有帮助:

create index on the_table ((a||b) varchar_pattern_ops);
注意
varchar\u pattern\u ops
参数。为了使索引可用于类似于
的查询,这是必需的

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


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

您能否调整搜索字符串而不是列,以便只使用一列?您有什么样的数据?我知道,最好是避免此类查询,但我没有邀请此查询,这是其他人的查询:-(.您能否调整搜索字符串而不是列,以便只使用一列?您有什么样的数据?我知道,最好是避免此类查询,但我没有邀请此查询,这是其他人的查询:-(.thanx很多,有了这个索引它就可以工作。没有索引的postgres在表上进行Seq扫描的成本非常高。创建索引后,使用位图堆扫描进行查询。成本仅为没有索引的成本的三分之一。非常好。thanx很多,有了这个索引它就可以工作。没有索引的postgres在表上进行Seq扫描的成本非常高成本。创建索引后,使用位图堆扫描进行查询。成本仅为无索引成本的三分之一。非常好。