旨在在Oracle和SQL Server中获得最佳性能的数据建模

时间:2018-08-20 15:16:15

标签: sql-server oracle performance database-performance query-performance

我有一个问题,关于如何才能对库存数据库进行建模,以获得最佳性能。

在SQL Server或Oracle中,每次执行的更新都会产生一点锁定。

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

解决方案1 ​​:创建带有数量列的产品库存表,并针对每个输入或输出针对此列执行SQL更新

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

最终,我将使用产品库存移动表的结果“ 总和”执行更新库存产品数量的过程 之后,我将删除产品库存移动表中的所有记录

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

解决方案2 下,当我需要获取产品库存数量时,我将有一个缺点,我需要使用产品库存移动表的联接进行查询,并进行咨询产品的所有输入和输出的总和,但是通过这种方式,我整天都不会有任何锁

您对提出的两种解决方案有何看法?

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

非常感谢您

1 个答案:

答案 0 :(得分:0)

这里有许多假设,都可能解决“假设”问题。您没有数字可以自信地说出这两种设计都会导致问题。我们也不知道您的硬件规格。

首先进行一些尽职调查,然后算出您每天或每月要处理多少事务,以及在给定的时间(分钟/小时)将要发生多少读写?一旦获得了这些数字(即使它们不准确,您也应该有所活动),就可以为两个解决方案的托管数据库(或类似数据库)的实际实例运行一些基准测试,并亲自观察哪些性能更​​好。

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

通过一系列假设做出的决定会导致设计很固执,总是导致选择不佳。始终使用数据来驱动您的决策并验证您的假设。

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

祝你好运。