目录的作用

索引的作用

 

索引的作用就象书的目录,给出条件查找目录找出所需要的内容 
主键索引和聚合索引 

我们来看:(gid是主键,fariqi是聚合索引列): 

select top 10000 gid,fariqi,reader,title from tgongwen 
用时:196 毫秒。 扫描计数 1,逻辑读 289 次,物理读 1 次,预读 1527 次。 

select top 10000 gid,fariqi,reader,title from tgongwen order by gid asc 
用时:4720毫秒。 扫描计数 1,逻辑读 41956 次,物理读 0 次,预读 1287 次。 

select top 10000 gid,fariqi,reader,title from tgongwen order by gid desc 
用时:4736毫秒。 扫描计数 1,逻辑读 55350 次,物理读 10 次,预读 775 次。 

select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi asc 
用时:173毫秒。 扫描计数 1,逻辑读 290 次,物理读 0 次,预读 0 次。 

select top 10000 gid,fariqi,reader,title from tgongwen order by fariqi desc 
用时:156毫秒。 扫描计数 1,逻辑读 289 次,物理读 0 次,预读 0 次。 

从以上我们可以看出,不排序的速度以及逻辑读次数都是和“order by 聚集索引列” 的速度是相当的,但这些都比“order by 非聚集索引列”的查询速度是快得多的。 
同时,按照某个字段进行排序的时候,无论是正序还是倒序,速度是基本相当的。 
1 楼 lgs0626 2012-05-29  
1.复合索引有什么作用?       
1。你的索引这样创建      create   index   yourindex   on   yourtable(id,name,city)   
2.当你在查询的时候      select   id,name,city      from   yourtable      这时候查询优化器,不在扫描表了,而是直接的从索引中拿数据,因为索引中有这些数据,   这叫覆盖式查询,这样的查询速度非常快。    2.  用聚集索引、唯一值索引、不重新计算索引、文件组索引。到底哪个好些?

   在创建聚集索引之前,应先了解您的数据是如何被访问的。可考虑将聚集索引用于:             包含大量非重复值的列。           使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、<   和   <=。           被连续访问的列。           返回大型结果集的查询。           经常被使用联接或   GROUP   BY   子句的查询访问的列;一般来说,这些是外键列。对   ORDER   BY   或   GROUP   BY   子句中指定的列进行索引,可以使   SQL   Server   不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。           OLTP   类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建聚集索引。                  聚集索引不适用于:             频繁更改的列        这将导致整行移动(因为   SQL   Server   必须按物理顺序保留行中的数据值)。这一点要特别注意,因为在大数据量事务处理系统中数据是易失的。           宽键        来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内。                     在创建非聚集索引之前,应先了解您的数据是如何被访问的。可考虑将非聚集索引用于:             包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。如果只有很少的非重复值,如只  有  1   和   0,则大多数查询将不使用索引,因为此时表扫描通常更有效。           不返回大型结果集的查询。           返回精确匹配的查询的搜索条件(WHERE   子句)中经常使用的列。           经常需要联接和分组的决策支持系统应用程序。应在联接和分组操作中使用的列上创建多个非聚集索引,在任何外键列上创建一个聚集索引。           在特定的查询中覆盖一个表中的所有列。这将完全消除对表或聚集索引的访问。  

3. 总结要点:

一个表可以有多个非聚集索引,但只能有一个聚集索引。

如果该表上尚未创建聚集索引,且在创建   PRIMARY   KEY   约束时未指定非聚集索引,

PRIMARY   KEY   约束会自动创建聚集索引

4。例子:

CREATE   TABLE   tbl_test   (              col_pk         INT                         NOT   NULL,              col_1           TINYINT                 NOT   NULL,              col_2           SMALLINT               NOT   NULL,              col_3           TINYINT                 NOT   NULL,              col_4           DATETIME               NULL,                      col_5           DATETIME               NULL              );  

   GO  
      
CREATE   CLUSTERED   INDEX   idx_tbl_test_00      ON   tbl_test   (              col_4   ASC,              col_5   ASC,              col_1   ASC,              col_2   ASC,              col_3   ASC      );      GO           CREATE   NONCLUSTERED   INDEX   idx_tbl_test_01   ON   tbl_test      (              col_1   ASC,              col_2   ASC,              col_3   ASC      )      GO           ALTER   TABLE   tbl_test      ADD   CONSTRAINT   pk_tbl_test   PRIMARY   KEY   (              col_pk      );      GO 



5。例子2

--增加列 alter table [TableName] add [P_ID] bigint not null default 0
--删除列 alter table [TableName] drop column [P_ID]
--设置主键 alter table [TableName] add constraint PK_TableName primary key  (P_ID)
--删除主键 alter table [TableName] drop constraint PK_TableName
--创建聚集索引(一个表中允许一个聚集索引) CREATE  CLUSTERED  INDEX [tTopIndex] ON  [TableName] ([P_ID]) ON [PRIMARY]
--创建非聚集索引 CREATE  INDEX [tTopIndex] ON TableName ([P_ID]) ON [PRIMARY]
--删除索引 drop index [TableName].[tTopIndex]
--增加字段说明 EXECUTE sp_addextendedproperty N'MS_Description', N'照片ID', N'user', N'dbo', N'table', N'TableName', N'column', N'P_ID'