0

我有一张daily_data表来保存商店的条目、销售额、营业时间(可以是 100 种类型)。我的计划是计算许多商店(可以是 1000 家商店)的转化率、条目/小时、销售额/小时……。
它可以是 1 天、2 天或月、年的数据。

id_pos 日期 数据类型 价值
1 2021-11-01 1 100
1 2021-11-01 2 20
1 2021-11-01 3 8
2 2021-11-02 1 50
2 2021-11-02 2 10
2 2021-11-02 3 8
... ... ... ...

data_type列说明:

  1. 条目
  2. 销售量
  3. 小时

* id_pos : 店铺位置 ID

我的查询:

select id_pos,data_type, sum(value) as data
from daily_data 
where id_pos IN (1,2) AND date>='2021-11-01' AND date<='2021-11-30' 
group by id_pos,data_type

执行上述查询后,我处理编码结果以计算转换(销售额/条目)、每小时销售额、每小时条目数,...(处理具有许多异常情况的公式)。

| id_pos | data_type        | value |
| 1      | conversion       | 20%   |
| 1      | entries per hour | 20.1  |
| 1      | sales per hour   | 5.6   |

问题:
这种结构对于小数据就足够了,但是当我有 10-20 百万行时,查询性能就不好了!
所以我的计划是创建一个新的“total_data”表,以保存转换数据、每小时条目、每小时销售额(执行上述查询后)。通过这种方式,我可以直接选择最终数据,而无需在编码中处理任何公式。

id_pos 日期开始 日期结束 数据类型 价值
1 2021-11-01 2021-11-30 转换 10
1 2021-11-01 2021-11-30 条目/小时 20.1
1 2021-11-01 2021-11-30 销售额/小时 5.1
2 2021-11-01 2021-11-30 转换 22
2 2021-11-01 2021-11-30 条目/小时 6.2
2 2021-11-01 2021-11-30 销售额/小时 6.5

但问题是日期范围,它可以是 2021-11-02 到 2021-11-05 或数千个案例。如何制作正确的“data_total”表?

4

1 回答 1

0

假设您总是想要 1 和 2 的值id_pos,您可以定义一个部分索引来加快查询速度:

CREATE INDEX ON daily_data ("date") WHERE id_pos IN (1, 2);

如果 的 值id_pos是可变的,最好的选择是有两个索引,一个 onid_pos和一个 on "date"

于 2021-12-02T09:06:27.827 回答