- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个存储数百万行的表。它看起来像这样:
Table_Docs
ID, Bigint (Identity col)
OutputFileID, int
Sequence, int
…(many other fields)
我们发现设计它的开发人员将 OutputFileID 设置为聚集索引。它并不独特。具有此 ID 的记录可能有数千条。它对任何使用该表的进程没有任何好处,因此我们计划将其删除。
问题是,将其更改为什么...我有两个候选者,ID身份列是一个自然的选择。但是,我们有一个进程在此表上执行大量更新命令,并且它使用序列来执行此操作。该序列不是唯一的。大多数记录只包含一个,但大约 20% 可以有两个或多个具有相同序列的记录。
INSERT 应用程序是一个 VB6 碎片,向表中抛出数千个插入命令。插入的值从来不按任何特定顺序排列。所以一次插入的序列可能是12345,下一次插入可能是12245。我知道这可能会导致SQL移动大量数据以保持聚集索引有序。然而,插入的顺序通常接近有序。所有插入都将发生在聚簇表的末尾。例如:我有 500 万条记录,序列范围为 1 到 500 万。 INSERT 应用程序将在任何给定时间在该范围的末尾插入序列。数据的重新排序应该最少(最多数万条记录)。
现在,UPDATE 应用程序是我们的 .NET 明星。它对序列列执行所有更新。 “Update Table_Docs Set Feild1=This, Field2=That...WHERE Sequence =12345”
– 每天数十万个。更新是完全随机的,涉及表的所有点。
所有其他进程都只是在此(网页)上执行 SELECT。常规索引涵盖了这些内容。
所以我的问题是,哪个更好......ID 列上的唯一聚集索引有利于 INSERT 应用程序,或者 Sequence 上的非唯一聚集索引有利于 UPDATE 应用程序?
最佳答案
首先,我绝对建议使用聚集索引!
其次,您的聚集索引 should be :
所以 INT IDENTITY 是一个经过深思熟虑的选择。
当您的聚集键不唯一时,SQL Server 将为这些列值添加一个 4 字节的唯一符 - 从而使您的聚集键以及该表上的所有非聚集索引变得更大且不太理想。
所以在你的例子中,我会选择 ID - 它是狭窄的、静态的、唯一的并且不断增加的 - 没有比这更优化的了!由于Sequence
在UPDATE语句中被大量使用,所以一定要在它上面放置一个非聚集索引!
参见 Kimberly Tripp 的精彩文章 blog posts on choosing the right clustering key有关该主题的精彩背景信息。
关于sql-server-2005 - 我应该在此 SQL 2005 表上创建唯一聚集索引还是非唯一聚集索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2747708/
我想沿着一个轴从特定位置的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 中,此阻塞版本有效:
我是一名优秀的程序员,十分优秀!