SQLServer之索引

  索引(Index)好比书的目录,当进行检索时不必扫描整个表,就可以迅速的找到表中的数据。

书要制作目录可以方便查找,但也需要纸张来存储目录信息,如果增加或删除了书的内容,那么

目录必定也要做修改,索引与之类似,可以快速检索,但也需要一定的内存开销以及维护开销。

  首先先解释下索引是如何快速找到数据的?

  索引是一个单独的、物理的分散存储数据库结构。它是针对一个表建立的,每个索引

页面中的行都含有逻辑指针,指向数据库表中的物理位置。在进行检索的时候,总是先

检索索引页,找到指向所需数据的指针,然后通过该指针找到数据页面读取数据,提高查询效率。

  建立索引页必然要占用一部分内存,同时增加、删除、修改的时候也要花费时间去维护索引,

所以选择合适的列建立索引是很必要的。

  那么该选择怎样的列建立索引呢?

1、主键列:存取最常用的列便是主键。

2、外键列:外键通常要与其它表进行关联查询,将其设置为索引,可以更加快速的进行连接

3、经常被作为条件检索的列和按排序频繁检索的列。

  选择好列还要遵循一定的建立索引原则,如下:

1、数据量很少的表不要建立索引,因为数据太少,索引的效果不明显,还得花时间维护。

2、对检索的字段有很多数据值或空值,为其建立索引,可以大大提高检索速度。

3、在对表中的数据进行大量更新时最后先删除索引在更新,然后在建立索引。

4、在模糊查询时尽量不要使用like '%某某%' ,而使用like '某%'

5、少用全表索引

  知道原则了,那么开始建立索引了,一般索引分为聚集索引(簇索引)和非聚集索引(非簇索引),

其建立都是用CREATE INDEX,指示建立聚集索引时要显示声明CLUSTERED。

例如对StudentInfo表中的No列和Name列建立降序非聚集索引或聚集索引,可以这样写:

CREATE [CLUSTERED] INDEX indexName_stuInfo ON StudentInfo(No,Name DESC)

[CLUSTERED]表示可选,选择则建立聚集所以。

注意:聚集索引一张表只能建一个,故在对一张表建立聚集索引前要先删除原来的聚集索引。

如:IF EXISTS(SELECT NAME FROM SYS.INDEXES WHERE NAME ='indexName_stuInfo')

  DROP INDEX StudentInfo.indexName_stuInfo

  GO

  CREATE CLUSTERED INDEX indexName_stuInfo ON  StudentInfo(No,Name DESC)

  GO

 *******************************下回介绍维护索引******************************************** 

 

 

 

 

 

 

posted @ 2011-05-31 23:45  WILLPAN  阅读(471)  评论(2编辑  收藏  举报