在PostgreSQL中配置合并加入

时间:2015-06-11 14:48:09

标签: sql postgresql join postgresql-performance

我正在使用带有大表的PostgreSQL,查询需要花费太多时间。

我有两张桌子。第一个有大约600万行(数据表),第二个有大约30000行(用户表)。

每个用户在数据表中有大约200行。 之后,数据和用户表最多可增加30倍。

我的查询是:

SELECT d.name, count(*) c
  FROM users AS u JOIN data AS d on d.id = u.id  
  WHERE u.language = 'eng' GROUP BY d.name ORDER BY c DESC LIMIT 10;

90%的用户拥有英语,查询时间为7秒。每列都被编入索引!

我读到了Merge Join,它应该非常快,所以我按id排序表并强制Merge Join,但时间增加到20秒。

我想,表格配置错误,但我不知道如何修复它。

我应该做出其他改进吗?

1 个答案:

答案 0 :(得分:0)

对于此查询:

*someone else* force ordering

首先,尝试索引:SELECT d.name, count(*) c FROM users u JOIN data d on d.id = u.id WHERE u.language = 'eng' GROUP BY d.name ORDER BY c DESC LIMIT 10; users(language, id)。看看这是否加快了查询速度。

其次,data(id, name)是什么?用户可以拥有多个用户吗?有没有有效值的表格?根据这些问题的答案,可能还有其他方法来构建查询。