我将尽我所能提供更多的细节。在高事务量的环境中,在一系列数字之间递增的最佳方式是什么,也就是说,从web api快速传入的调用?
我拥有的第一个表是可用范围的主表。如下所示。我也不确定这是否是实现它的最佳方式,所以我对建议持开放态度
A公司最初给我的范围是100-200。随着时间的推移,我们开始走下坡路,所以他们给了我们一个新的范围。新的范围是201-300。
Company Range Inactive
A 100-200 X
B 100-200
C 200-350
A 201-300 第二个表是在范围之间使用的数字的列表。
Company Number DateUsed
A 198 2017-11-30
B 199 2017-11-30
A 200 2017-11-30
B 105 2017-11-30
C 215 2017-11-30
A 201 2017-11-30一旦一个范围用完了,我需要能够标记出这个范围,以便它不再被使用,并使用下一个可用的范围。我在考虑将"Last Used“数字添加到第一个表中,并执行一条Update语句,其中output带有一条case语句,用于inactive,如果为空,则标记为inactive。
我的问题是,在高事务量的环境中,最好的方法是什么?我对Scope_Identity很熟悉,但我不认为这在这个设置中会起作用。
发布于 2017-12-01 06:38:22
在第一个表中有一个非活动的标志对我来说似乎是完全正常的。我已经编写并测试了一个查询,该查询将更新您的标志,前提是Range列被分成较低的range列和较高的range列。我将这两个表分别称为Ranges和RangeLog。
UPDATE Ranges
SET Inactive = 'X'
WHERE EXISTS (SELECT tA.Company, RangeLow, RangeHigh, COUNT(*)
FROM Ranges tA INNER JOIN (SELECT DISTINCT Company, Number
FROM RangeLog) tB ON tA.Company = tB.Company AND (Number BETWEEN tA.RangeLow AND tA.RangeHigh)
GROUP BY tA.Company, RangeLow, RangeHigh
HAVING RangeHigh - RangeLow + 1 = COUNT(*)
AND Ranges.Company = tA.Company AND Ranges.RangeLow = tA.RangeLow AND Ranges.RangeHigh = tA.RangeHigh)显然,这不适用于您现在使用的模式,但是对范围查找列进行拆分可以使数据更具原子性和可用性,并且更易于编写查询。这是对您的表的一个相当小的修改。
让我们知道这对你来说是什么样子!
https://stackoverflow.com/questions/47580020
复制相似问题