聚集、非聚集索引、唯一索引、复合索引、系统自建索引
2008-11-25 09:59
聚集与非聚集索引
摘自: http://hi.baidu.com/flyabout/blog/item/866505d1d9ed9ad3572c84a3.html 索引是在数据库表或者视图上创建的对象,目的是为了加快对表或视图的查询的速度 按照存储方式分为:聚集与非聚集索引 按照维护与管理索引角度分为:唯一索引、复合索引和系统自动创建的索引 索引的结构是由:根节点--->非叶节点--->非叶节点--->叶节点 1、聚集索引(只能建立一个):表中存储的数据按照索引的顺序存储,检索效率比普通索引高,但对数据新增/修改/删除的影响比较大 特点: (1) 一个表可以最多可以创建249个索引 (2) 先建聚集索引才能创建非聚集索引 (3) 非聚集索引数据与索引不同序 (4) 数据与索引在不同位置 (5) 索引在叶节点上存储,在叶节点上有一个"指针"直接指向要查询的数据区域 (6) 数据不会根据索引键的顺序重新排列数据 创建聚集索引的语法: create CLUSTERED INDEX idximpID ON EMP(empID) 2、非聚集索引(可以建立多个):不影响表中的数据存储顺序,检索效率比聚集索引低,对数据新增/修改/删除的影响很少 特点: (1) 无索引,数据无序 (2) 有索引,数据与索引同序 (3) 数据会根据索引键的顺序重新排列数据 (4) 一个表只能有一个索引 (5) 叶节点的指针指向的数据也在同一位置存储 语法: create NONCLUSTERED INDEX idxempID on emp(empID) 3、惟一索引:惟一索引可以确保索引列不包含重复的值. 可以用多个列,但是索引可以确保索引列中每个值组合都是唯一的 姓 名 李 二 张 三 王 五 语法: create unique index idxempid on emp(姓,名) 4、复合索引:如果在两上以上的列上创建一个索引,则称为复合索引。 那么,不可能有两行的姓和名是重复的 语法: create index indxfullname on addressbook(firstname,lastname) 5、系统自建的索引:在使用T_sql语句创建表的时候使用PRIMARY KEY或UNIQUE约束时,会在表上自动创建一个惟一索引 自动创建的索引是无法删除的 语法: create table ABc ( empID int primary key, firstname varchar(50)UNIQUE, lastname varchar(50)UNIQUE, ) 这样的结果就出来了三个索引,但只有一个聚集索引哦 6、创建索引的方法: 1、企业管理器中 (1)右击某个表,所有任务---管理索引,打开管理索引,单击“新建”就可以创建索引 (2)在设计表中进行设计表,管理索引/键 (3)在关系图中,添加表后右击关系图中的某个表,就有“索引/键” (4)通过向导,数据库---创建索引向导 (5)通过T-SQL语句 2、能过“索引优化向导”来优化索引的向导,通过它可以决定选择哪些列做为索引列 实验的流程: 1、先创建一个表,然后查看一下他的占用资源情况及select * from 表 看一下排序 2、然后创建索引,在观看一下占用资源的情况,及排序情况,看看聚集与非聚集的排序是 否用变化 答案是:聚集的有变化,非聚集的排序与未创建索引之前一样 |