基本上,我是通过匹配两个表中的字符串来匹配地址的
表B有500万行,所以我不想每次匹配地址时都为它创建新列
所以我考虑创建索引,我当前匹配地址的索引如下所示:
CREATE INDEX matchingcol_idx ON tableB USING btree (sub_building_name || ', ' || building_name )
但是这不起作用,因为它不接受连接栏
我的更新查询将等于= b. sub_building_name||","||b.建筑物名称
如果没有新列和索引,这将花费数小时
有没有办法在不创建新的串联列的情况下实现这一点?
2条答案
按热度按时间qlfbtfca1#
对于基于表达式的索引,需要将表达式放在括号中:
但是,如果在
where
子句中使用了完全相同的条件,则仅使用该索引,任何仅引用其中一列的条件都不会使用该索引。uxhixvfz2#
要通过LIKE或ILIKE进行匹配,可以创建
gin
索引,如下所述https://niallburkley.com/blog/index-columns-for-like-in-postgres/验证是否已通过此查询启用扩展模块
关于为什么
concat
不会削减它的相关信息:)https://www.postgresql.org/message-id/1409893231867-5817884.post%40n5.nabble.com