我们有2个包含大约40M行的表。数据库的大小约为20GB,大部分是针对这两个表。每天,我们需要删除一些数据,即大约10M行。所以,我们使用批量删除来保持日志文件的大小。SQL Server中主键和唯一聚簇索引之间的性能差异
最初,表中没有主键。但是每个表格都有唯一的聚集索引。删除需要永远。即在虚拟机上删除500K行大约需要2-3小时。 *在删除之前,索引被重建。
现在,我们将唯一的聚集索引转换为主键。大约需要20-30分钟才能删除2M行。
我明白主键和唯一聚集索引之间存在差异,但为什么性能如此不同?
任何人都有一些见解?
感谢
我很好奇,如果插入想要保存到新表中的集合,然后'TRUNCATE'你的父表保存日志。 – Kermit 2012-07-18 17:20:56
查询计划有什么不同?另外,主索引是否也是聚集的(除非您指定了NONCLUSTERED,否则它是默认的)? – 2012-07-18 17:22:46
您是否尝试过使用非集群索引?原因是 - “非聚集索引”保持“行定位符ID”信息和“聚集索引保持完整的行信息。第二点是你是直接在机器上而不是“虚拟机器”上检查它,因为它取决于'虚拟机'分配了多少'RAM','访问时间'取决于'RAM'。 – 2012-07-18 17:24:22