昨天,我被两个不同的人问了同样的问题。他们的表格有一个将记录组合在一起的字段,如一年或一个地点。在这些组中,他们希望拥有一个从1开始并按顺序递增的唯一ID。显然,您可以搜索MAX(ID)
,但如果这些应用程序有大量流量,则需要锁定整个表格以确保多次返回相同的ID。我考虑过使用序列,但这意味着为每个组动态创建一个序列。
年内创建的记录应增加1,然后在明年年初重新开始。
| Year | ID |
|------|----|
| 2016 | 1 |
| 2016 | 2 |
| 2017 | 1 |
| 2017 | 2 |
| 2017 | 3 |
公司有许多地点,他们希望为每个客户生成一个唯一的ID,并将位置ID与递增ID相结合。
| Site | ID |
|------|----|
| XYZ | 1 |
| ABC | 1 |
| XYZ | 2 |
| XYZ | 3 |
| DEF | 1 |
| ABC | 2 |
答案 0 :(得分:0)
经常使用不多的一个技巧是在Site / ID或Year / ID上创建聚簇索引 - 但是将ID列的顺序更改为Desc而不是ASC。 这样,当您需要扫描CI以获取Next ID值时,它只需要检查聚簇索引中的1行。我在Multi-Billion Record表上使用了它,它运行得非常快。通过按网站或年份对表进行分区,您可以获得更好的性能,然后在运行MAX(ID)查询时,您将获得分区消除的额外好处。