【问题标题】:Select all open orders from an order table and its associated state table从订单表及其关联的状态表中选择所有未结订单
【发布时间】:2017-12-08 19:40:30
【问题描述】:

前提:

  1. 订单表 - ID、费率、单位、金额、时间戳
  2. 订单状态表 - id、order_id、状态、时间戳

两个表都是只插入的(没有更新)

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

目的:

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

目前使用子查询、group by 和 having 子句也可以达到同样的效果。还尝试了连接、分组和有子句。

问题:

选择时间非常慢 - 对于大约一百万条记录的订单表大小,大约需要 500 到 1000 毫秒。

所需帮助:

  1. 索引建议
  2. 查询重写建议

非常感谢任何帮助。

【问题讨论】:

  • 您在查询中有 DISTINCT 吗?
  • 您可以编辑问题并添加表格结构(创建表格语句),包括您拥有的索引和约束。
  • 请发布您的 SQL

标签: database postgresql


【解决方案1】:

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

不知道你已经拥有什么

订单表

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

rate: indexed(因为您需要按比率对结果进行排序)

订单状态表

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

order_id: 外键 + 索引

状态:索引

也许索引 order_id,state 也有帮助(试试看)

【讨论】:

    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    相关资源
    最近更新 更多