索引加快检索表中数据的方法,它对数据表中一个或者多个列的值进行结构排序,是数据库中一个非常有用的对象。
索引的创建
#1使用企业管理器创建
启动企业管理器--选择数据库------选在要创建索引的表------在表的下拉菜单中选择索引---在快捷菜单中选择新建索引--
在新建索引对话框中单击“添加”按钮,弹出“从列表中选择列”,在该对话框中选择要添加到索引键的表列
单击确定返回新建索引对话框,再点击确定完成索引的创建。
#2使用T-sql语句创建索引。
create index语句为给定表或视图创建一个改变物理顺序的聚集索引,也可以创建一个具有查询功能的非聚集索引。语法格式如下:
create [unique] [clustered] [nonclustered] index index_name
on {tabel/view} (column[dese/asc][....n])
注: [unique] [clustered] [nonclustered]表示要创建索引的类型,以此为唯一索引,聚集索引,和非聚集索引,当省略unique选项时,建立非唯一索引.当省略clustered,nonclustered选项时.建立聚集索引,省略nonclustered选项时,建立唯一聚集索引。
使用索引虽然可以提高系统的性能,增强数据检索速度,但它需要占用大量的物理存储空间,建立索引的一般原则如下:
(1)只有表的所有者可以在同一表中创建索引。
(2)每个表中只能创建一个聚集索引。
(3)每个表中最多可以创建249个非聚集索引。
(4)在经常查询的字段上建立索引。
(5)定义text,image,bit数据类型的列上不要建立索引。
(6)在外间上可以建立索引。
(7)在主键列上一定要建立索引。
(8)在那些重复的值比较多,查询较少的列上不要建立索引。
查看索引
#1使用企业管理器查看索引,步骤如下:
(1)启动SQL Server management Studio并连接到SQLServer 2008数据库
(2)选择指定的数据库,|展开要查看索引的表。
(3)右击该表,在弹出快捷菜单中选择‘设计’命令
(4)弹出‘表结构设计’对话框,右击该对话框,在弹出的快捷菜单中选择‘索引/键’命令
(5)打开“索引/键”对话框,在对话框左侧选中某个索引,在对话框的右侧就可以查看此索引的信息,并可以修改相关信息。
#2使用系统存储过程查看索引,语法格式如下:
use database_name
EXEC Sp_helpindex table_name
#3利用系统表查看索引信息
查看数据库中指定表的索引信息,可以利用该数据库中的系统表sysobjects和sysindexes进行查询,系统表sysobjects可以根据表明查找到索引表的ID号,再利用系统表sysindexes根据ID号查找到索引文件的相关信息。
索引的修改
#1使用企业管理器修改索引。
#2使用T-SQL语句更改索引名称,语法格式如下:
use database_name
exec sp_rename ‘table_name.old_name’ ‘new_name’
注:要对索引进行重命名时,需要修改的索引名格式必须为“表名.索引名”
索引的删除
#1使用企业管理器删除索引
#2使用T-SQL语句删除索引,语法格式如下:
drop Index table_name.index_name,.....n
注:drop index语句不能删除通过PRINARY KEY和UNIQUE约束创建的索引,若要删除该约束相应的索引,请使用带有DROP CONSTRAINT子句的ALTER TABLE.
当我们对一个表建立一个主键时,默认会给该主键列添加一条聚集索引,这是数据库内部自动建立的,唯一性约束也会默认创建一个非聚集索引。
create table MyTable ( id int identity(1,1) primary key, name nvarchar(10) unique ) exec sp_helpindex MyTable
上面我们建立了一个主键id 和唯一性约束的name列,查看表可以看到这时产生了两个索引
聚集索引是一个宝贵的资源,在一些表的中有时我们永远不会用到主键来作为查询条件,或者作为其他表的外键,这时主键的聚集索引
就显得大才小用了,我们希望将聚集索引建立在其他真正需要的字段,不过当我们执行删除操作时会报以下错误
消息 3723,级别 16,状态 4,第 1 行
不允许对索引 'MyTable.PK__MyTable__3213E83F145C0A3F' 显式地使用 DROP INDEX。该索引正用于 PRIMARY KEY 约束的强制执行
不过我们可以先删除主键约束,这样聚集所以就自动删除了
alter table MyTable drop constraint PK__MyTable__3213E83F145C0A3F
我们再看下聚集索引已经不存在了
当然唯一约束所引起的索引也可以同样的方式操作,先删除唯一约束
*****
删除主键的聚集索引时,在表的设计中进行删除主键即可,但同时应更新数据库并重新新建查询,从而显示没有了聚集索引的表。