从订单表及其关联的状态表

时间:2017-12-08 19:40:30

标签: database postgresql

前提:

  1. 订单表 - id,rate,unit,amount,timestamp
  2. 订单状态表 - id,order_id,state,timestamp
  3. 两个表都是仅插入(无更新)

    对于创建的每个订单,状态表可能有一个或多个订单状态,例如0表示打开,1表示已完成等。

    目的:

    1. 检索所有未结订单
    2. 按费率desc / asc
    3. 检索所有未结订单

      目前使用subquery,group by和having子句实现了相同的目的。还试过加入,分组和有条款。

      问题:

      非常慢的选择时间 - 大约500到1000毫秒的订单表大小约为百万条记录。

      必需的帮助:

      1. 索引建议
      2. 查询重写建议
      3. 任何帮助非常感谢。

1 个答案:

答案 0 :(得分:1)

不知道表结构(索引和约束)。 如果您的订单状态表包含每个订单所经历的每个州并考虑您需要运行的查询,我建议维护一个只包含每个订单的最后一个状态(这也是我猜的当前状态)的表并保留之前的订单历史表中的状态。

不知道你已经拥有什么

订单表

id:主键(使用b-tree自动编入索引)

评分:已编入索引(因为您需要按费率对结果进行排序)

订单状态表

id:主键(使用b-tree自动编入索引)

order_id:外键 + 索引

州:指数

也许索引 order_id,州也可以帮忙(试一试)