http://technet.microsoft.com/zh-cn/library/ms177484.aspx
大家看一下这个连接,是讲非聚集索引的,可是我看不太懂,我想问那个图中根节点图中的索引行放的是什么,指向叶节点的索引行又是什么,最后一段怎么数据行中会是聚集索引,我对聚集索引和非聚集索引的具体在存储的形态不了解,有谁可以帮我解释一下
还有这样创建后,比如一个CODE,我创建为非聚集索引,他查询时,怎么查询的,怎么会提高速度!

解决方案 »

  1.   

    ...........没人知道吗?
    说的简单点就是 比如一个表有2个字段 CODE跟DATE ,在SQL7.0体系中,对索引加如了如果存在聚集索引就按照聚集索引的键值来搜索,不按照物理指针来搜索,那么CODE是非聚集索引,DATE是聚集索引,现在查询CODE=7的行,那么他是怎么利用这个非聚集索引的呢,在那个图里的索引行到底是怎么去连接找到他的数据行的!
      

  2.   

    非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。与使用书中索引的方式相似,Microsoft® SQL Server™ 2000 在搜索数据值时,先对非聚集索引进行搜索,找到数据值在表中的位置,然后从该位置直接检索数据。这使非聚集索引成为精确匹配查询的最佳方法,因为索引包含描述查询所搜索的数据值在表中的精确位置的条目。如果基础表使用聚集索引排序,则该位置为聚集键值;否则,该位置为包含行的文件号、页号和槽号的行 ID (RID)。例如,对于在 emp_id 列上有非聚集索引的表,如要搜索其雇员 ID (emp_id),SQL Server 会在索引中查找这样一个条目,该条目精确列出匹配的 emp_id 列在表中的页和行,然后直接转到该页该行。多个非聚集索引
    有些书籍包含多个索引。例如,一本介绍园艺的书可能会包含一个植物通俗名称索引,和一个植物学名索引,因为这是读者查找信息的两种最常用的方法。对于非聚集索引也是如此。可以为在表中查找数据时常用的每个列创建一个非聚集索引。注意事项
    在创建非聚集索引之前,应先了解您的数据是如何被访问的。可考虑将非聚集索引用于: 包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。如果只有很少的非重复值,如只有 1 和 0,则大多数查询将不使用索引,因为此时表扫描通常更有效。
    不返回大型结果集的查询。
    返回精确匹配的查询的搜索条件(WHERE 子句)中经常使用的列。
    经常需要联接和分组的决策支持系统应用程序。应在联接和分组操作中使用的列上创建多个非聚集索引,在任何外键列上创建一个聚集索引。
    在特定的查询中覆盖一个表中的所有列。这将完全消除对表或聚集索引的访问。 
      

  3.   

    大乌龟,这个我都看过了,那我现在举了个例子,比如CODE=7,他怎么去查呢,7作为"部首",问题是他怎么作为部首呢,他是内部编译还是怎么样?而且他不是聚集索引,不是连续的,可能CODE=7有多行数据,他便宜部首的时候只能便宜成一个键值,那么他怎么去搜索!
      

  4.   

    那么非聚集索引就要对CODE的每一个值都要建立一个键值,以此为了以后能寻找到数据行,那么不就等于在建立非聚集索引的时候把表中所有的记录都遍例了一次嘛!然后还把这些CODE的键值要保存在一个地方,以后有查询时去匹配,匹配到了,再根据键值去找到它?
    那么在SQL7.0体系中,如果有聚集索引,他会根据聚集索引的键值去搜索,这个怎么理解?
    再问一个哦,就是那个图,第一个根节点中的索引键放的是什么,然后叶节点中的索引键又是存放着什么,为什么要分3层呢,不直接分2层!
      

  5.   

    这是数据结构的问题
    比如一个CODE,我创建为非聚集索引,他查询时,怎么查询的,怎么会提高速度!---用不用得上,还要看你的SQL语句
      

  6.   

    楼上你说的用的上用不上是SQL可能在JOIN的时候用到多个关系,或者前导列用错,或者是在函数中,我就举个简单的例子,就是WHERE语句中有一个条件,就是用这个非聚集索引,不存在用不上的原因!