ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 若删除了表中的聚集索引会怎样?

若删除了表中的聚集索引会怎样?

原创 Linux操作系统 作者:bigholy 时间:2010-12-24 11:52:21 0 删除 编辑

注:此文源自http://www.sqlmag.com/blogs/sql-server-questions-answered/sql-server-questions-answered/tabid/1977/entryid/12748/Default.aspx

问题:
   经常谈到聚集索引就是“数据”,但是并不完全理解其真正含义。如果删除了表中的聚集索引,会丢失数据吗?

回答:

  经常有人谈到此问题,索引结构容易使人迷惑,索引似乎很神秘,到头来认为非常复杂。表可以或没有聚集索引的形式存储,如果没有聚集索引的表,则称之为“堆”(Heap),反之,则称之为“聚集表”。当创建了聚集索引,SQL Server会临时复制Heap堆中的Pages页面,并按聚集键的顺序存储数据,最终将原来那些Heap中的Pages页删除。从这一点来说,SQL Server逻辑上维护着一张双链表(B+树--通过指针来查找数据)。

  另外,当查询使用非聚集索引时,聚集索引有助于快速查找数据。非聚集索引提供了一种不同于聚集索引键的有效查找数据的方法。比如:在Employee表上,为EmployeeID创建了聚集索引,此时,聚集索引键EmployeeID为重复出现在非聚集索引记录中,主要使用聚集索引键来获取存储在聚集索引数据行的列数据(此过程也称之为“书签查找”或“键查找”)。

  不过,删除了表中的聚集索引,所有非聚集索引则会相应发生改变,但是,数据并不会删除,只是数据存储的顺序不需要维护(即聚集索引中的索引组件)。非聚集索引会采用聚集索引键来查找对应的数据行,因此,当聚集索引删除后,非聚集索引需要修改,以使用另外一种方法来查找对应的数据行,其原因是不存在聚集键。

  在没有聚集索引的情况下,查找记录行的直接方法是使用数据行在数据库中的物理位置(行标识RID--由文件号,页号,记录号(槽号)构成)。由于不存在聚集索引,非聚集索引中则需要包含RID。因此,当聚集索引删除时,所有非聚集索引需要重建,以使用RID的方法在堆中定位对应的数据行。

  重建表的所有非聚集索引的开销比较大。当聚集索引也用于主键或唯一键,也称为外键引用,在这种情况下,要删除主键,需要先删除所有的外键引用。虽然删除聚集索引不会删除数据,删除前仍需要慎重考虑。

  与索引相关的问题比较多,索引最佳实践经常是此系列的主题,我会在后续的其他索引问题中讨论。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/355374/viewspace-682551/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-11-08

  • 博文量
    43
  • 访问量
    83759