Vac*_*ano 6 sql-server uniqueidentifier clustered-index sql-server-2008 newsequentialid
我正在为我公司正在开始的新数据库制定数据库标准.我们尝试定义的一件事是与UniqueIdentifiers相关的主键和聚簇索引规则.
(注意:我不想讨论使用UniqueIdentifier作为主键或聚簇索引的利弊.网上有大量关于此的信息.这不是讨论.)
所以这是我担心的场景:
假设我有一个带有UniqueIdentifier的表作为聚簇索引和主键.让我们称之为ColA.我将ColA的默认值设置为NewSequentialId().
使用NewSequentialId()我插入三个连续的行:
{72586AA4-D2C3-440D-A9FE-CC7988DDF065}
{72586AA4-D2C3-440D-A9FE-CC7988DDF066}
{72586AA4-D2C3-440D-A9FE-CC7988DDF067}
然后我重启我的服务器.NewSequentialId的文档说"重新启动Windows后,GUID可以从较低的范围重新开始,但仍然是全局唯一的."
因此下一个起点可能低于前一个范围.
所以重启后,我再插入3个值:
{35729A0C-F016-4645-ABA9-B098D2003E64}
{35729A0C-F016-4645-ABA9-B098D2003E65}
{35729A0C-F016-4645-ABA9-B098D2003E66}
(我不确定guid在数据库中是如何表示的,但我们假设因为这个从3开始,之前的7以7开始,3个比7个小".".
当您执行位于聚簇索引中间的插入时,必须重新映射索引.(至少我的DBA告诉过我.)每次重新启动时,我都冒着将新的UniqueIdentifier范围放在其他先前范围中间的风险.
所以我的问题是:由于下一组UniqueIdentifiers将小于最后一组,每个插入是否会导致我的聚簇索引混乱?
如果没有,为什么?SQL Server是否知道我正在使用NewSequentialId?这有什么补偿吗?
如果没有,那么它如何知道接下来会插入什么?也许接下来的百万次插入将从3开始.或者他们可能从7开始.它是如何知道的?
或者它不知道,只是保持一切顺序.如果是这种情况,则一次重启会严重影响性能.(这让我觉得我需要自己的自定义NewSequentialId,它不会受到重启的影响.)这是正确的吗?还是有一些我不知道的魔法?
编辑:我的标准强烈建议不要将GUID作为聚簇索引.正如我上面所说,有很多原因,这是一个坏主意.我试图找出这是否是另一个原因.
| 归档时间: |
|
| 查看次数: |
1506 次 |
| 最近记录: |