首页 > 解决方案 > 以在 Oracle 和 SQL Server 中获得最佳性能为目标的数据建模

问题描述

我有一个关于如何为我的股票数据库建模以获得最佳性能的问题。

在 SQL Server 或 Oracle 中,执行的每个更新都会生成一个小锁。

我想知道您能告诉我的最佳解决方案是什么

解决方案 1:创建一个包含数量列的产品库存表,并为每个输入或输出对该列执行 SQL 更新

解决方案 2:为产品库存移动创建一个表,对于每个输入,我将执行一个正数的插入,对于每个输出,我将执行一个负数的插入。

在一天结束时,我会执行一个过程,用产品库存移动表的“ sum ”结果更新库存产品的数量。然后,我将删除产品库存移动表中的所有记录

使用解决方案 1,我将具有执行简单选择以获取产品库存数量的优势,但在白天,我将有很多锁的缺点,因为关于输出销售产品的许多数量更新

使用解决方案 2,当我需要获取产品库存数量时,我会遇到劣势,我需要通过连接产品库存移动表进行查询,并对所咨询的所有输入和输出进行求和产品,但这样一整天我都不会有任何锁

您如何看待提出的两种解决方案?

进行解决方案 2中描述的建模是一个好习惯吗?

太感谢了

标签: sql-serveroracleperformancedatabase-performancequery-performance

解决方案


这里做了很多假设,可能会解决“假设”问题。您没有数字可以自信地说明这些设计中的任何一个都会导致问题。我们也不知道您的硬件规格。

首先进行一些尽职调查,并弄清楚您每天或每月处理多少数量等,以及在任何给定时间(分钟/小时)将发生多少读/写?一旦你有了这些数字(即使它们不准确,你应该得到一些活动感)在托管数据库的实际实例(或类似的实例)上为你的两个解决方案运行一些基准测试,并亲自看看哪些表现更好。

以 3 倍或 5 倍的读/写次数重复该练习并再次进行比较,以便为未来的增长做好准备。

用一堆假设做出的决定会导致非常固执的设计,总是会导致糟糕的选择。始终使用数据来推动您的决策并验证您的假设。

PS:这里从经验谈起。鉴于我们正在处理非常大的事务,我们通常有一个汇总表和一个明细表,并在将新记录插入明细等时使用触发器来更新汇总表中的计数。

祝你好运。


推荐阅读