正确索引大型时间序列数据集以进行复杂查询

时间:2019-01-17 01:10:22

标签: python postgresql

我有一个很大的时间序列数据表。约8亿行。我需要正确索引这个大型数据集。我的用户界面具有下拉菜单输入作为查询选择器,允许用户更新数据集/可视化。有7种潜在的用户输入会提示对表进行查询

通常,查询顺序保持一致。阶段>周>团队>对手>地图>圆形>状态。我应该在此序列上创建单个多列索引吗?还是应该应用多个多列索引?或者,第三个选项是分别索引作为用户输入的每个列。哪种方法最有效?

def timeseries (map,stage,week,stat,team,opponent,round):
    teams=[team,opponent]
    df=df[df.match_id == id_dict[stage][week][team][opponent]]
    df=df[df.mapname == map] 
    df=df[df.stat_type == stat]
    df=df[df.team.isin(teams)]
    df=df[df.map_round == round]

    --> df to visualization.

match_id的第一个过滤器有些变通,因为用户实际上是根据其他输入选择器间接选择匹配ID的。 (id_dict返回游戏的单个比赛ID)

1 个答案:

答案 0 :(得分:0)

根据您运行PostGRES Indexing进行摘要的PostGRES版本,本文可能会有用:

数据库将合并尽可能多的单行索引以进行优化,但是它仍然必须交叉引用完整的行。如果您知道某些行组合会比其他行更受欢迎,那么我将对它们进行组合索引以提高性能。如果您不插入表,那么拥有许多索引应该不会受到损害。