SQL SERVER数据库索引(学习笔记)

定义:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

 

优点与缺点:建立索引的目的是加快对表中记录的查找排序。

      为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

 

可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引

 唯一索引 唯一索引是不允许其中任何两行具有相同索引值的索引。

 

  当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。

 

  主键索引

 

  数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。

 

  在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

 

  聚集索引

 

  在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。

 

  如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

 

实例:

CREATE TABLE mytable(

 

  idserial primary key,

 

  category_id int not null default0,

 

  user_id int not null default0,

 

  adddate int not null default0 

  );

如果在查询时常用类似以下的语句: 

  SELECT * FROM mytable WHERE category_id=1; 

  最直接的应对之道,是为category_id建立一个简单的索引: 

  CREATE INDEX mytable_categoryid ON mytable (category_id);

  SELECT * FROM mytable WHERE category_id=1 AND user_id=2;

  第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。可以建立多重的索引。

   CREATE INDEX mytable_categoryid_userid ON mytable(category_id,user_id);

 

SELECT * FROM mytable 

  WHERE category_id=1 AND user_id=2 

  ORDER BY add date DESC; 

  很简单,就象为where字句中的字段建立一个索引一样,也为ORDERBY的字句中的字段建立一个索引: 

  CREATE INDEX mytable_categoryid_userid_adddate ON mytable (category_id,user_id,adddate);

原文地址:https://www.cnblogs.com/fjzhang/p/2487530.html