sql-server – “避免基于递增密钥创建聚簇索引”是SQL Server 2000天的一个神话吗?

前端之家收集整理的这篇文章主要介绍了sql-server – “避免基于递增密钥创建聚簇索引”是SQL Server 2000天的一个神话吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们的数据库由许多表组成,其中大多数使用整数代理键作为主键.这些主键中大约有一半位于标识列上.

数据库开发始于sql Server 6.0时代.

从一开始就遵循的规则之一是,避免基于递增键创建聚簇索引,如在这些Index Optimization Tips中找到的那样.

现在使用sql Server 2005和sql Server 2008,我有强烈的印象,情况发生了变化.同时,这些主键列是表的聚簇索引的完美第一候选者.

解决方法

这个神话可以追溯到sql Server 6.5之前的 added row level locking.并在 Kalen Delaney之前在这里暗示.

这与数据页面使用的“热点”以及整个2k页(sql Server 7及更高版本使用8k页)被锁定的事实有关,而不是插入的行
编辑,2012年2月

发现Kimberly L. Tripp的权威文章

“The Clustered Index Debate Continues…”

Hotspots were something that we greatly tried to avoid PRIOR to sql Server 7.0 because of page level locking (and this is where the term hot spot became a negative term). In fact,it doesn’t have to be a negative term. However,since the storage engine was rearchitected/redesigned (in sql Server 7.0) and now includes true row level locking,this motivation (to avoid hotspots) is no longer there.

编辑,2013年5月

lucky7_2000的答案中的链接似乎表明热点可以存在而且会引发问题.
但是,本文使用TranTime上的非唯一聚簇索引.这需要添加uniquifier.这意味着指数不是严格单调增加(而且太宽).该答案中的链接与此答案或我的链接并不矛盾

在个人层面上,我已经在数据库上进行了调用,我将每秒数万行插入到具有bigint IDENTITY列作为聚簇PK的表中.

原文链接:https://www.f2er.com/mssql/79499.html

猜你在找的MsSQL相关文章