用于分析目的的大查询时间

时间:2016-07-26 12:41:52

标签: sql postgresql analytics postgresql-performance

我只使用选择查询(没有插入\更新)使用PostgreSQL 9.4分析50GB(16M行,15列)表。我的服务器有4个虚拟插槽和16GB RAM。 一个典型的查询我使用:

select y,count(z) from table where x in (select * from verySmallTable) group by y;

查询的结果是提供给python脚本的。

我尝试过创建各种索引,但仍然每个查询可能需要15分钟才能运行。另外,优化数据库非常耗时。

另一方面,我使用Tableau(使用数据提取)来检索类似的信息,并在不到一分钟的时间内得到结果。因此,我得出结论,使用正确的结构(自动创建),这样的分析查询可以非常快速地运行。

我正在寻找一种方法来减少查询运行时间,使用PostgreSQL(i也有Oracle许可证),或其他一些开源数据库,甚至是Python中可以加载数据的一些本地解决方案,而不必优化我运行的每个查询的结构。

1 个答案:

答案 0 :(得分:1)

我假设这是您的查询:

select t.y, count(t.z)
from table t
where t.x in (select vst.x from verySmallTable vst)
group by t.y;

小表中的x值是唯一的。我建议将查询写成:

select t.y, count(t.z)
from verySmallTable vst join
     table t
     on t.x = vst.x
group by t.y;

为此,您需要table(x, y, z)上的索引 - 按此顺序列。