PostgreSQL中的串联索引

时间:2018-07-10 16:34:03

标签: sql postgresql indexing

所以基本上我是通过匹配2个表中的字符串来匹配地址的

表B有500万行,所以我真的不想每次想匹配地址时都为其创建新列

所以我考虑改为创建索引,我当前与地址匹配的索引看起来像:

CREATE INDEX matchingcol_idx  ON tableB USING btree (sub_building_name || ', ' || building_name )

但是这不起作用,它不接受连接栏

然后我的更新查询将等于= b.sub_building_name || ','|| b.building_name

没有新的列和索引,这将花费多个小时

有没有一种方法而无需创建新的串联列?

1 个答案:

答案 0 :(得分:4)

对于基于表达式的索引,您需要将表达式放在括号之间:

CREATE INDEX matchingcol_idx  
   ON tableB USING btree ( (sub_building_name || ', ' || building_name) );

但是,如果您在where子句中使用完全相同的条件,则将仅使用该索引。任何仅引用其中一列的条件都不会使用该索引。