我正在使用SQL Server 2008.我知道如果表没有聚簇索引,那么它被称为堆,否则存储模型称为聚簇索引(B-Tree).
我想了解更多关于堆存储的确切含义,它看起来是什么以及它是否被组织为"堆"数据结构(例如最小堆,最大堆).有推荐的读数吗?我想要更多内部,但不是太深.:-)
乔治,提前谢谢
此2007白皮书将组织为聚簇索引的表上的单个select/insert/delete/update和range select语句的性能与组织为具有非聚簇索引的堆的表上的性能进行比较,该表与CI相同的键列上表.
通常,聚簇索引选项在测试中表现更好,因为只需要维护一个结构,因为不需要书签查找.
本文未涉及的一个可能有趣的案例是堆上的非聚簇索引与聚簇索引上的非聚簇索引之间的比较.在那个实例中,我原本预计堆可能会在NCI叶级别上执行得更好一次SQL Server有一个RID可以直接跟随而不需要遍历聚簇索引.
是否有人知道在这个领域进行了类似的正式测试,如果是这样,结果是什么?
如果我在日期时间字段上有一个带有聚簇索引的SQL Server表,那么在插入之前设置为DateTime.Now(来自C#),索引应该是升序还是降序以避免重组表?
谢谢.
是否可以从SQL Server 2008中不是主键的create table语句创建聚簇索引?
这个目的是针对SQL Azure中的表,因此我不能首先创建表,然后在表上创建聚簇索引.
编辑:显然它是导致我的问题的FluentMigrator,它的版本表没有聚集索引,因此尝试创建版本控制表而不是我的表是错误的.
sql-server clustered-index sql-server-2008 sql-server-2008-r2 azure-sql-database
SQL Server 2008+聚簇索引的排序顺序是否会影响插入性能?
特定情况下的数据类型是integer,插入的值是升序(Identity).因此,索引的排序顺序将与要插入的值的排序顺序相反.
我的猜测是,它会产生影响,但我不知道,也许SQL Server对这种情况有一些优化,或者它的内部数据存储格式对此无动于衷.
请注意,问题是关于INSERT性能,而不是SELECT.
更新
要更清楚地了解这个问题:当要插入的值integer(ASC)与聚簇索引(DESC)的排序顺序相反时会发生什么?
SQL 2000
NED表具有SIGN表的外键NED.RowID到SIGN.RowID
SIGN表具有NED表的外键SIGN.SignID到NED.SignID
RowID和SignID是作为GUID的聚簇主键(不是我的选择)
WHERE子句是:
FROM
[SIGN] A
INNER JOIN NED N ON A.SIGNID = N.SIGNID
INNER JOIN Wizard S ON A.WizardID = S.WizardID
INNER JOIN [Level] SL ON N.LevelID = SL.LevelID
LEFT JOIN Driver DSL ON SL.LevelID = DSL.LevelID
AND DSL.fsDeptID = @fsDeptID
INNER JOIN [Character] ET ON S.CharacterID = ET.CharacterID
INNER JOIN Town DS ON A.TownID = DS.TownID
WHERE
(A.DeptID = @DeptID OR
S.DeptID = @DeptID
AND
A.[EndTime] > @StartDateTime AND A.[StartTime] < @EndDateTime
AND
A.NEDStatusID = …Run Code Online (Sandbox Code Playgroud) 群集索引如何存储在硬盘上?什么是逻辑顺序?
非聚集索引如何工作?
我有以下钥匙:
ALTER TABLE dbo.Table ADD CONSTRAINT PK_ID PRIMARY KEY CLUSTERED
(
ID ASC
)
Run Code Online (Sandbox Code Playgroud)
所以我在ID列上有聚集索引和主键.现在我需要删除聚簇索引(我想在另一列上创建新的聚簇索引),但保留主键.可能吗?
我的一个合作伙伴的印象是,在SQL Server 2008中向表中添加索引时,PK的索引也会添加到该索引中.因此,如果您使用更宽的主键,那么该键也将包含在新索引中,大大增加了上面使用的磁盘空间,超出了已经为PK索引支付的惩罚.我之前没有听说过,到目前为止我的搜索结果是空的.
希望有人在这里指出相关文档,以确认或否认这一点.请?
sql-server indexing primary-key clustered-index sql-server-2008
我有一个多对多的表,让我们说:
PersonJob(personId,jobId)
Run Code Online (Sandbox Code Playgroud)
with clustered index(personId,jobId).
问题是:
如果在SQL中的某个地方,我会进行如下查询:
SELECT *
FROM PersonJob JOIN Job ON PersonJob.jobId = Job.jobId
.......
Run Code Online (Sandbox Code Playgroud)
是否会利用该聚集索引在PersonJob表中查找具有特定jobId的记录?或者我最好在PersonJob表的jobId列上创建新的非群集非唯一索引?
谢谢帕维尔