sql索引知识(1)

最近工作很闲,看点数据库优化的东西,呐地神啊,引出了一大推不会的知识点,现在总结一下,供大家和自己今后参考用

索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。

表或视图可以包含以下类型的索引:

  • 聚集
    • 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。
    • 只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。
  • 非聚集
    • 非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。
    • 从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。
    • 在 SQL Server 2005 中,可以向非聚集索引的叶级别添加非键列以跳过现有的索引键限制(900 字节和 16 键列),并执行完整范围内的索引查询。可创建如下索引:
      USE AdventureWorks;
      GO
      CREATE INDEX IX_Document_Title      
      ON Production.Document (Title, Revision)      
      INCLUDE (FileName); 
  • 聚集索引和非聚集索引都可以是唯一的。这意味着任何两行都不能有相同的索引键值。另外,索引也可以不是唯一的,即多行可以共享同一键值。
  • 每当修改了表数据后,都会自动维护表或视图的索引。

  • 对于包含 SELECT、UPDATE 或 DELETE 语句的各种查询,索引会很有用;查询优化器:扫描表时,查询优化器读取表中的所有行,并提取满足查询条件的行。扫描表会有许多磁盘 I/O 操作,并占用大量资源。查询优化器使用索引时,搜索索引键列,查找到查询所需行的存储位置,然后从该位置提取匹配行。通常,搜索索引比搜索表要快很多,因为索引与表不同,一般每行包含的列非常少,且行遵循排序顺序。查询优化器在执行查询时通常会选择最有效的方法。但如果没有索引,则查询优化器必须扫描表。
  • 对索引我们要做的:您的任务是设计并创建最适合您的环境的索引,以便查询优化器可以从多个有效的索引中选择。
  • 索引类型,参考http://msdn.microsoft.com/zh-cn/library/ms175049(SQL.90).aspx
  • 索引设计基础:某个索引对于含有整数数据类型同时还是唯一的或非空的列是理想索引
posted @ 2009-10-30 11:32  aisoon99  阅读(260)  评论(1编辑  收藏  举报