- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我公司即将启动的新数据库制定数据库标准。我们试图定义的事情之一是与唯一标识符相关的主键和聚集索引规则。
(注意:我不想讨论使用 UniqueIdentifier 作为主键或聚集索引的利弊。网络上有大量关于此的信息。这是不 那个讨论。)
所以这是让我担心的情况:
假设我有一个以 UniqueIdentifier 作为聚集索引和主键的表。我们称之为 ColA。我将 ColA 的默认值设置为 NewSequentialId()。
使用 NewSequentialId() 我插入三个连续的行:
{72586AA4-D2C3-440D-A9FE-CC7988DDF065}
{72586AA4-D2C3-440D-A9FE-CC7988DDF066}
{72586AA4-D2C3-440D-A9FE-CC7988DDF067}
然后我重新启动我的服务器。 docs for NewSequentialId说“重新启动 Windows 后,GUID 可以从较低的范围重新开始,但仍然是全局唯一的。”
因此下一个起点可以低于之前的范围。
所以重启后,我又插入了 3 个值:
{35729A0C-F016-4645-ABA9-B098D2003E64}
{35729A0C-F016-4645-ABA9-B098D2003E65}
{35729A0C-F016-4645-ABA9-B098D2003E66}
(我不确定 guid 在数据库中的具体表示方式,但我们假设这个 guid 以 3 开头,之前的 guid 以 7 开头,因此 3 个比 7 个“小”。)
当您在聚集索引中间执行插入操作时,必须重新映射索引。 (至少我的 DBA 是这么告诉我的。)每次重新启动时,我都会冒着新的 UniqueIdentifier 范围位于其他先前范围中间的风险。
所以我的问题是:由于下一组 UniqueIdentifiers 将小于上一组,因此每次插入都会导致我的聚集索引打乱吗?
如果没有,为什么? SQL Server 是否知道我正在使用 NewSequentialId?它如何弥补这一点?
如果没有,那么它怎么知道我接下来要插入什么?也许接下来的一百万个插入将从 3 开始。或者也许他们将从 7 开始。它是怎么知道的?
或者它不知道,只是让一切井井有条。如果是这种情况,那么一次重新启动可能会严重影响性能。 (这让我觉得我需要自己的自定义 NewSequentialId,它不受重新启动的影响。)这是正确的吗?还是有什么我不知道的魔法?
编辑: GUID 作为聚集索引在我的标准中是强烈反对的。正如我上面所说,有很多原因表明这是一个坏主意。我正在尝试找出这是否是另一个原因。
最佳答案
通常,您将使用适当的FILL FACTOR
创建索引,以便在所有页面中留出空白空间,以应对这种情况。话虽这么说,一旦空白空间被填充,聚集索引就会重新排序。
我知道您不想讨论使用 GUID
作为聚集键,但这是不推荐这样做的原因之一。
将会发生的情况是,您的页面拆分量将不断增加,当您不断插入行时,这将导致非常高水平的碎片,并且您将需要以更高的频率重建索引以保持性能线。
要全面讨论该主题,没有比这更好的来源了
顺便说一句,当您考虑创建自己的 NewSequentialID 创建函数时,您可能会遇到设计问题,应该重新考虑您的计划。
关于sql-server - UniqueIdentifier 聚集索引上的 NewSequentialId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944271/
我想沿着一个轴从特定位置的X数组中分散并收集元素。 因此,给定一个索引数组idx,我想选择第0列的idx(0) th元素,第1列的idx(1) th元素,等等。 在Numpy中,以下语句: X = n
我有一个在集群硬件中运行的 Java 应用程序。我使用 Hashmap 作为缓存。我也希望缓存能够集群。有没有一些开源java项目可以在两台连接的机器上同步Hashmap? 最佳答案 看看 Hazel
这个问题在这里已经有了答案: Count number of times that an item occurred in each of multiple columns (4 个答案) 关闭 5
我一直在尝试“组合”一个列表 I mean putting items together depending on the item inbetween, so ['d','-','g','p','q
非聚集文件存储在数据文件中,聚集索引按逻辑索引顺序存储数据。 逻辑顺序位于哪里? 最佳答案 大多数 MySQL 索引的结构为 BTree。 (参见维基百科) (我在此讨论中排除了 FULLTEXT 和
所有源和目标都位于不可缓存的内存中。毫无疑问。在启动 DMA(即分散-聚集 DMA)之前,我构建了 DMA 链表(包含 src、dest、size 和 next)。我想我不必将列表放入不可缓存的内存中
我需要将输入字符串拆分为输出字符串(按一定顺序)通过在输入字符串上应用一组正则表达式。我想实现这个功能与 akka Actor 集群一起使用,我将其分散正则表达式和输入字符串并收集字符串。不过我想知道
Windows 文件系统支持scatter/gather IO .(当然,其他平台也可以) 但是不知道什么时候用IO机制。 你能给我解释一个合适的案例吗? 使用I/O机制我们能得到什么好处?(只是一点
我正在尝试使用克隆调用两个端点并收集它们的信息以通过聚合发送,我必须将其与分散收集中介器一起使用。每个端点返回一个 json 字符串。但我一直遇到“期望 SOAP Envelope 的实现作为父级”错
我想要实现的目标是使用户空间中的内存块可以通过 PCIe 直接由 FPGA 板中的 DMA 内核访问(不受内核的任何干扰)。 为此,我在用户空间中使用 posix_memalign() 在用户空间中分
假设我有以下数据框: > a a Source: local data frame [3 x 2] my_type_1_num_widgets my_type_2_num_widgets 1
我已经搜索了一段时间,但似乎无法在文档或 SO 上找到任何有用的信息。 This question并没有真正帮助我,因为它引用了修改程序集,而我正在用 C 语言编写。 我有一些代码进行间接访问,我想对
我已经坚持了一段时间了。我的代码基于 https://webrtc.org/getting-started/firebase-rtc-codelab .我基本上只是将其更改为 React 和 fire
我可以合并 Mono> 的列表吗?数据源整合为单个Mono>包含所有项目而不阻塞? 在我的带有 Lombok 分散收集应用程序的 JDK 9 Spring Boot 2 中,此阻塞版本有效:
我是一名优秀的程序员,十分优秀!