我会尽力提供尽可能详细的信息。在高事务环境中增加一系列数字的最佳方法是什么,这意味着,来自网络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语句,其中case语句处于非活动状态,标记为非活动状态(如果为空)。
我遇到的问题是在高交易环境中执行此操作的最佳方法是什么?我熟悉Scope_Identity
,但我认为这不会适用于此设置。
答案 0 :(得分:0)
在第一个表中有一个非活动标志对我来说似乎完全正确。我已经编写并测试了一个将更新标志的查询,前提是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)
显然,这不会像现在一样使用模式,但是将其拆分到Range查找列会使数据更具原子性和可用性,并且更容易编写查询。而且这对你的桌子来说是一个相当小的修改。
告诉我们您的看法!