我有一项很常见的任务是在我们的 Web 应用程序(asp.net + mssql)中显示销售历史。我有一张桌子,上面有销售交易,比如:
- SellerID (string)
- Product PartNumber
- Product ManufacturerName
- ProductID (string uniq normalized PN+MN)
- Date of sale
- Price
- Qty
- Option 1
- Option 2
- Option 3
选项是一些特定的属性(如合同号等)。
我需要显示按 productID 分组的销售数据,其中包含 Qty 和 Amount 的总和。我还需要提供按 SellerId、Date 和 Options 过滤的能力。所以用户应该看到表格:
- Part Number
- Manufacturer Name
- Sum(Qty)
- Sum(Price)
用户还可以按显示的列进行排序和过滤并浏览页面
目前我们有大约 500 万条销售记录,而带有这种分组、过滤和排序的“直接”查询需要太多时间(并且没有考虑到这个 Web 服务可以被多个并发用户使用)。
为了让它更快地工作,我们过去常常根据查询中使用的所有条件创建一个缓存键,并使用相同的方案(加上缓存键)将查询的整个结果复制到缓存表中。但是有一些缺点,例如缓存表的快速增长,以及在缓存表中创建不规则的困难(它会减慢插入速度)
我很确定对于大多数与销售相关的业务应用程序来说,这项任务是非常普遍和著名的。
人们如何解决所有这些问题?
UPD:我忘了提。
没有插入销售数据(我们过去每季度手动加载一次)
我在考虑 olap,但从未真正使用过它。使用 olap 有意义吗?
我们不受 SQL Server 的严格限制,如果有意义,我们可以使用任何其他数据库