首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有重复项的范围之间的SQL增量-多线程

没有重复项的范围之间的SQL增量-多线程
EN

Stack Overflow用户
提问于 2017-12-01 02:13:11
回答 1查看 45关注 0票数 1

我将尽我所能提供更多的细节。在高事务量的环境中,在一系列数字之间递增的最佳方式是什么,也就是说,从web api快速传入的调用?

我拥有的第一个表是可用范围的主表。如下所示。我也不确定这是否是实现它的最佳方式,所以我对建议持开放态度

A公司最初给我的范围是100-200。随着时间的推移,我们开始走下坡路,所以他们给了我们一个新的范围。新的范围是201-300。

代码语言:javascript
复制
Company   Range    Inactive
   A      100-200      X
   B      100-200
   C      200-350
   A      201-300  

第二个表是在范围之间使用的数字的列表。

代码语言:javascript
复制
 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很熟悉,但我不认为这在这个设置中会起作用。

EN

回答 1

Stack Overflow用户

发布于 2017-12-01 06:38:22

在第一个表中有一个非活动的标志对我来说似乎是完全正常的。我已经编写并测试了一个查询,该查询将更新您的标志,前提是Range列被分成较低的range列和较高的range列。我将这两个表分别称为RangesRangeLog

代码语言:javascript
复制
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)

显然,这不适用于您现在使用的模式,但是对范围查找列进行拆分可以使数据更具原子性和可用性,并且更易于编写查询。这是对您的表的一个相当小的修改。

让我们知道这对你来说是什么样子!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47580020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档