【发布时间】:2018-11-14 12:06:59
【问题描述】:
我有一个非常简单的查询
UPDATE TableA
SET date_type = TableB.date_type
FROM TableB
WHERE TableB.int_type = TableA.int_type
我的指数是:
TableA(int_type), TableB(int_type, date_type)
EXPLAIN 结果:
Update on TableA (cost=2788789.320..34222368.900 rows=82594592 width=261)
-> Hash Join (cost=2788789.320..34222368.900 rows=82594592 width=261)
Hash Cond: (TableA.int_type = TableB.int_type)
-> Seq Scan on tableA (cost=0.000..12610586.960 rows=101433296 width=247)
-> Hash (cost=1272403.920..1272403.920 rows=82594592 width=18)
-> Seq Scan on TableB (cost=0.000..1272403.920 rows=82594592 width=18)
查询已超过 3 小时。
可以做些什么来让它运行得更快?从EXPLAIN 结果中可以看出,没有使用索引。我应该选择其他索引/进行任何其他改进以使查询运行得更快吗?
PostgreSQL 9.6
【问题讨论】:
-
您希望每个
tableA.int_type有多少来自tableB.int_type的匹配行? (tableB似乎更大了……)两者的PK/FK关系? -
@wildplasser 来自
tableB的所有(大约 8000 万条)记录将转到tableA(1.2 亿条)。一对一的关系。没有PK/FK关系
标签: sql postgresql performance