在我的PostgreSQL数据库中,我有6个名为storeAPrices,storeBprices等的表,包含相同的列和索引,如下所示:
- 项目代码(字符串,主键)
- item_name(字符串,b树索引)
- 是_whigthed(编号:0|1,betree索引)
- 项目_价格(编号)
我希望通过item_code或item_name相似性将每个storePrices表连接到其他表,但是“OR”应该像编程语言中那样起作用(只有当left为false时才检查右侧)。
当前,我的查询性能较低。
select
*
FROM "storeAprices" sap
left JOIN LATERAL (
SELECT * FROM "storeBPrices" sbp
WHERE
similarity(sap.item_name,sbp.item_name) >= 0.45
ORDER BY similarity(sap.item_name,sbp.item_name) DESC
limit 1
) bp ON case when sap.item_code = bp.item_code then true else sap.item_name % bp.item_name end
left JOIN LATERAL (
select * FROM "storeCPrices" scp
WHERE similarity(sap.item_name,scp.item_name) >= 0.45
ORDER BY similarity(sap.item_name,scp.item_name) desc
limit 1
) rp ON case when sap.item_code = rp.item_code then true else sap.item_name % rp.item_name end
这是我的查询的一部分,花了太多时间来响应。我的数据不是很大(每个表15k项)
我还有一个索引“is_whigthed”,我不知道如何使用它。(我不想设置它为变量,因为我想得到所有“is_whigthed”的结果)
有什么建议吗?
1条答案
按热度按时间qc6wkl3g1#
OR应该比用例更快
你也可以像pg_trgm模块文档中提到的那样在item_name列上创建三元组索引,因为你使用了它的%操作符来表示相似性