我们的应用程序有一个表,它将客户端的所有事务记录存储在一个数据库表中,该表具有自动生成的密钥作为主键。我们现在每天开始接收大约25,000条记录,并开始怀疑在某些时候这是否会导致性能问题。
背景:
交易表包含每个交易的所有详细信息我们的客户(在现实世界中,他们是食品供应商(比如说Kellogs谷物)和经销商(比如沃尔玛))每天都在进行。最初,设计没有指定任何可用作事务主键的逻辑/功能字段,因此DB开发人员继续添加自动生成的密钥以“填充”主键。由于客户端需要在前端拥有所有信息,因此查询始终为SELECT * FROM TRANSACTIONS
。该表有近80列,现已增长到100K记录。
数据库:Oracle 11g
核心业务逻辑实现在:Java 1.5(用于查询的JDBC驱动程序)
前端:SmartGWT
查询:
假设一直在抓取所有记录将在某个时刻开始锤击性能,我想寻求任何数据库设计/查询调整/一般建议,我应该考虑避免性能问题或提高模块的性能。
答案 0 :(得分:1)
Oracle 11允许您创建间隔分区。我认为交易日期是分区键的一个很好的候选者。我没有看到任何理由向最终用户显示所有交易(至少每次都有)。通常只显示上周/月的数据......检索完整的交易清单可以采用不同的方式处理(存储合并余额,使用保存历史数据的只读表等)。 此外,在一个表中有80列对我来说非常可疑。
答案 1 :(得分:1)
如果您还没有这样做,我建议在供应商ID上添加索引并将查询更改为:
SELECT * FROM TRANSACTIONS WHERE VENDOR_ID = :Vendor