2 簇索引
簇索引对表的物理数据页中的数据按列进行排序然后再重新存储到磁盘上即簇索
引与数据是混为一体的它的叶节点中存储的是实际的数据由于簇索引对表中的数据一
一进行了排序因此用簇索引查找数据很快但由于簇索引将表的所有数据完全重新排列
了它所需要的空间也就特别大大概相当于表中数据所占空间的120% 表的数据行只
能以一种排序方式存储在磁盘上所以一个表只能有一个簇索引
3 非簇索引
非簇索引具有与表的数据完全分离的结构使用非簇索引不用将物理数据页中的数据
按列排序非簇索引的叶节点中存储了组成非簇索引的关键字的值和行定位器行定位器
的结构和存储内容取决于数据的存储方式如果数据是以簇索引方式存储的则行定位器
中存储的是簇索引的索引键如果数据不是以簇索引方式存储的这种方式又称为堆存储
方式Heap Structure 则行定位器存储的是指向数据行的指针非簇索引将行定位器
按关键字的值用一定的方式排序这个顺序与表的行在数据页中的排序是不匹配的
由于非簇索引使用索引页存储因此它比簇索引需要更多的存储空间且检索效率较
低但一个表只能建一个簇索引当用户需要建立多个索引时就需要使用非簇索引了
从理论上讲一个表最多可以建249 个非簇索引

解决方案 »

  1.   

    两个索引都能加快查询速度,不同的是
    Clustered:聚集索引,表中的记录按照索引的字段物理排序。每在表中更改一条记录,如果涉及到索引字段的变化,整个表都要重新进行排序。如果F1为聚集索引,你可以直接select * from tablename 而不需要加上 order by F1
    Nonclustered:非聚集索引,表中的数据无序存放。每在表中更改一条记录,如果涉及到索引字段的变化,只对索引重新进行排序,而不是整个表都要重新进行排序
      

  2.   

    非聚集索引
    非聚集索引与聚集索引一样有 B 树结构,但是有两个重大差别: 数据行不按非聚集索引键的顺序排序和存储。
    非聚集索引的叶层不包含数据页。 
    相反,叶节点包含索引行。每个索引行包含非聚集键值以及一个或多个行定位器,这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。在 Microsoft® SQL Server™ 2000 中,非聚集索引中的行定位器有两种形式: 如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID。
    如果表没有聚集索引,或者索引在索引视图上,则行定位器就是行的聚集索引键。如果聚集索引不是唯一的索引,SQL Server 2000 将添加在内部生成的值以使重复的键唯一。用户看不到这个值,它用于使非聚集索引内的键唯一。SQL Server 通过使用聚集索引键搜索聚集索引来检索数据行,而聚集索引键存储在非聚集索引的叶行内。 
    由于非聚集索引将聚集索引键作为其行指针存储,因此使聚集索引键尽可能小很重要。如果表还有非聚集索引,请不要选择大的列作为聚集索引的键。