我只使用选择查询(没有插入\更新)使用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中可以加载数据的一些本地解决方案,而不必优化我运行的每个查询的结构。
答案 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)
上的索引 - 按此顺序列。