索引分析

簇集索引=聚集索引:  

在聚集索引下,
1 :聚集索引 (clustered index), 一种通过键值的逻辑顺序来确定表中相应行的物理顺序的索引。数据在物理上按顺序排在数据页上

2 :重复值也排列在一起,因而在范围查找时,可以先找到这个范围的起末点,且只在这个范围内扫描数据页,避免了大范围扫描,提高了查询速度。

3 :对于 聚集索引 ,将新行实际插入具有相似键值的现有行附近。这可改善查询性能,因为它导致数据页的存取模式更线性化,且产生更有效的预取。

4 :有大量重复值、且经常有范围查询 between, >,< ,>=,< =)和order by、group by发生的列,可考虑建立群集索引

5 :index的逻辑顺序与表中数据的物理顺序基本一致。这样的好处是,按照index来取数据时,磁头不会乱跑,从而提高了性能。
一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。  


6 :两大优势:1、以最快的速度缩小查询范围。 2、以最快的速度进行字段排序。

7 :一定要将聚集索引建立在: 1、您最频繁使用的、用以缩小查询范围的字段上;
2、您最频繁使用的、需要排序的字段上。 


  聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。  
   
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。  
   
  非簇集索引:  
  非聚集索引与聚集索引一样有   B   树结构,但是有两个重大差别:    
   
  数据行不按非聚集索引键的顺序排序和存储。  
   
   
  非聚集索引的叶层不包含数据页。    
  相反,叶节点包含索引行。每个索引行包含非聚集键值以及一个或多个行定位器,这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。  
   
  非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。在   Microsoft&reg;   SQL Server&#8482;   2000   中,非聚集索引中的行定位器有两种形式:    
   
  如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符   (ID)、页码和页上的行数生成。整个指针称为行   ID。  
   
   
  如果表没有聚集索引,或者索引在索引视图上,则行定位器就是行的聚集索引键。如果聚集索引不是唯一的索引,SQL   Server   2000   将添加在内部生成的值以使重复的键唯一。用户看不到这个值,它用于使非聚集索引内的键唯一。SQL   Server   通过使用聚集索引键搜索聚集索引来检索数据行,而聚集索引键存储在非聚集索引的叶行内。    
  由于非聚集索引将聚集索引键作为其行指针存储,因此使聚集索引键尽可能小很重要。如果表还有非聚集索引,请不要选择大的列作为聚集索引的键。  
   
   
  唯一索引:  
  唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。  
  唯一索引既是索引也是约束。  
   
  复合索引:  
  索引项是多个的就叫组合索引,也叫复合索引。  
  复合索引使用时需要注意索引项的次序。



创建简单索引  
  CREATE   INDEX   au_id_ind  
        ON   authors   (au_id)  
   
   
  创建唯一聚集索引  
  CREATE   UNIQUE   CLUSTERED   INDEX   employeeID_ind  
        ON   emp_pay   (employeeID   
   创建唯一非聚集索引
CREATE [ UNIQUE ]  NONCLUSTERED INDEX index_name
  ON table/view ( column  )   

 


  创建组合索引  
  CREATE   INDEX   emp_order_ind  
        ON   order_emp   (orderID,   employeeID)

限制索引:

   限制索引一般是没有经验的人常犯的错误之一,在SQL中有很多的陷阱都会史索引无法使用:

 1:使用不等号(<>,!=);
 2: 使用isnull,is not null;

 3:使用函数;

 4:比较不同的数据类型:

比如表中的字段的数据类型是account_number varchar2而且这个字段建立了索引,查询语句为:

select * from banks where account_number=990354,这样就会知晓全表扫描,oracle会

自动的把where子句变成to_number(account_number)=990354这样就限制了索引,所以要

使用select * from banks where account_number='990354';


  注意事项  
  在创建非聚集索引之前,应先了解您的数据是如何被访问的。可考虑将非聚集索引用于:    
   
  包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。如果只有很少的非重复

值,如只有   1   和   0,则大多数查询将不使用索引,因为此时表扫描通常更有效。  
   
   
  不返回大型结果集的查询。  
   
   
  返回精确匹配的查询的搜索条件(WHERE   子句)中经常使用的列。  
   
   
  经常需要联接和分组的决策支持系统应用程序。应在联接和分组操作中使用的列上创建多个非聚集索

引,在任何外键列上创建一个聚集索引。  
   
   
  在特定的查询中覆盖一个表中的所有列。这将完全消除对表或聚集索引的访问。



注意事项  
  定义聚集索引键时使用的列越少越好,这一点很重要。如果定义了一个大型的聚集索引键,则同一个表上定义的任何非聚集索引都将增大许多,因为非聚集索引条目包含聚集键。当把   SQL   脚本保存到可用空间不足的磁盘上时,索引优化向导不返回错误。有关   Microsoft&reg;   SQL   Server&#8482; 2000   中如何实现非聚集索引的更多信息,请参见非聚集索引。    
   
  在分析过程中,索引优化向导会消耗相当多的   CPU   及内存资源。最好在生产服务器的测试版上执行优化,而不要在生产服务器上执行。此外,最好在另一台计算机上而非运行   SQL   Server   的计算机上运行该向导。该向导不能用于在   SQL   Server   6.5   版或更早版本的数据库中选择或创建索引及统计信息。  
   
  在创建聚集索引之前,应先了解您的数据是如何被访问的。可考虑将聚集索引用于:    
   
  包含大量非重复值的列。  
   
   
  使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、<   和   <=。  
   
   
  被连续访问的列。  
   
   
  返回大型结果集的查询。  
   
   
  经常被使用联接或   GROUP   BY   子句的查询访问的列;一般来说,这些是外键列。对   ORDER  

BY   或   GROUP   BY   子句中指定的列进行索引,可以使   SQL   Server   不必对数据进行排序,

因为这些行已经排序。这样可以提高查询性能。  
   
   
  OLTP   类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建

聚集索引。    
  聚集索引不适用于:    
   
  频繁更改的列    
  这将导致整行移动(因为   SQL   Server   必须按物理顺序保留行中的数据值)。这一点要特别注

意,因为在大数据量事务处理系统中数据是易失的。  
   
  宽键    
  来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内

 

你可能感兴趣的:(数据结构,oracle,sql,应用服务器,SQL Server)