Postgres 9.4中超大客户表分区连接的最佳实践问询
超大客户表身份解析的连接性能优化问题
当前场景与查询语句
正在对两个超大客户表做身份解析,需按客户姓氏匹配,同时匹配包含昵称变体的名字,当前使用的SQL查询如下:
SELECT * FROM t1 INNER JOIN t2 ON t1.lname = t2.lname AND t1.fname ~ t2.fname_regex
遇到的性能瓶颈
由于表数据量极大,尝试按姓氏首字母拆分查询后,仅筛选姓氏以字母"a"开头的数据,t1仍有67.1万行、t2有20.3万行,上述查询数小时无法完成。
需求咨询
希望将表按字母范围拆分为单块6.7万/2万行的规模,按对应字母范围的块逐一进行连接。请问这类分区连接是否有最佳实践?能否让Postgres自动按列生成字母分区、创建索引并逐块执行连接?
注:使用Postgres 9.4.26版本,无法升级。
补充说明
性能问题核心来自正则匹配:通过外部昵称数据集为每个名字生成类似(^robert$|^bob$|^rob$)的fname_regex,以此匹配昵称变体。若该正则方案无法优化,请问有什么推荐的实现方式?
额外补充
已提出新问题,内容为基于多可能值连接两表的性能优化(原英文问题已翻译为中文)
内容的提问来源于stack exchange,提问作者Spine Feast
相关产品推荐
相关产品推荐

