利用DBCC PAGE查看SQL Server中的表和索引数据
2008-10-13 10:07:43 来源:WEB开发网滚动到这些结果的末端,我们可以看到我们的索引数据是按姓和名的逻辑排列来存储的。你也应该注意到,聚簇索引键也存储在索引行中。当需要一个书签查找(bookmark lookup)时,引擎可以用它来检索聚簇索引(这种类型的查找发生在索引栏没有包含需要用来满足一个查询的所有栏时)。
如果这里没有表上的聚簇索引,那么另外的栏将会指向实际的数据页。让我们重新创建作为非聚簇索引的主键并且重新检查由UNIQUE约束创建的非聚簇索引。注意,通过重新创建没有聚簇索引的表,基本页的数据已经改变了。通过DBCC IND,你可以看到这些页结构如何改变。
ALTERTABLEDBO.EMPLOYEEDROPCONSTRAINTPK_EMPLOYEE
GO
ALTERTABLEDBO.EMPLOYEEADDCONSTRAINTPK_EMPLOYEE
PRIMARYKEYNONCLUSTERED(EMPLOYEEID)
GO
DBCCIND('MSSQLTIPS',EMPLOYEE,-1)
DBCCPAGE('MSSQLTIPS',1,155,3)WITHTABLERESULTS
GO
正如你所看到的,在HEAP表中的索引(这张表不是聚簇的)存储了一个不同的指示器,这个指示器直接指向包含要求的另外的数据的页面。
这些都是很简单的例子,但是它们对给你关于如何和在哪里获得和显示数表和索引数据的想法是绰绰有余的。在以后的方法中,我将利用更多的例子来说明问题,这些例子将显示当一行改变并且它不适合某一页时将会发生什么,当行被删除时将发生什么,还有DBCC PAGE如何帮助解决阻塞和死锁问题。
我必须强调,DBCC IND和DBCC PAGE没有在正式文件中说明,它们可能在以后的SQL Server版本中会消失。在那出现之前,我会继续利用这些命令作为窥探引擎的数据存储技术和解决SQL Server问题的主要工具。
更多精彩
赞助商链接