1、索引:是一种特殊型的数据库对象,它与表直接相关,索引用来提高访问表中数据的速度,表示一种由内容到所在内容位置的映射关系。
2、索引的分类:
A、简单索引:仅包含一个属性的索引。
B、复杂索引:是由两个以上属性形成的索引,也可以称为组合索引。
C、唯一索引和非唯一索引:
唯一索引是指所引用的属性值能唯一地标识一行,即在此属性列中,不存在两个相同的值。
非唯一索引与唯一索相相对,允许出现重复值。如果使用非唯一索引进行查询,则可能传回多个符合“属性值
=某值”的记录。
D、聚集索引和非聚集索相:
聚集索引是所有记录都按顺序聚集在索引结构的叶结点上的索引。当查询一个数据时,从树的叶结点上后,可以直接得到这条记录,从而减少I/O操作。它的一个重要特点是,记录都是依照叶结点的顺序排列,也就是说使用聚集索引可以改变记录的物理存放顺序。
非聚集索引与聚集索引相对,指在叶结点上不包含记录的索引,即数据存储在一个位置,索引存储在另一个位置。索引中包含指向数据存储位置的指针,系统将通过该指针找到对应的记录。(一个表仅可能有一个聚集索引,全却可以拥有多个非聚集索引。但过多的索引将影响系统效率,这是由于索引建立完成后就会一成不变,如果数据表的数据发生了变化,就要对索引进行更新维护,如果有很多索引的话,将会给系统带来许多不必要的负担。)
创建索引:
create index c_address on customer(address) ------在customer表的address列上创建索引,其中()里的是列名
创建唯一索引:unique
create unique index c_email on customer(email) ------在customer表的customer列上创建唯一索引,其中()里的是列名
创建聚集索引:clustered
create unique index sm_orderID on so_master(orderID) ------在so_master表中orderID列上创建聚集索引,其中()里的是列名
创建非聚集索引:nonclustered
create nonclustered index o_amount on orders(amount) ------在orders表中amount列上创建非聚集索引,其中()里的是列名
在创建表时同时创建主键及非聚集索引:
create table employee(
empid int not null primary key nonclustered,
....
) ------创建employee表,把empid设为主键并且设为非聚集索。
create clustered index CL_empname on dbo.employee(empname) ------在创建 employee表中empname字段上的聚集索引。(使用查询语句时,可以看到表中的数据按照empname列进行排列的)
在计算列上创建一个索引:
create table A(
A1 int,
A2 int,
A3 as a1+A2
)
go
create index AA on A(A3)
3、使用索引:创建了索之后,在进行查询时,系统将会优化查询选项,自动选择执行查询的最佳方式,包括使用那个索。在大多数情况下,查询优化器都能选择最佳方法来处理查询,手动指定与系统不同的索引将会降低系统的性能。
确保在表中使用索引:
select * from employee with(index(cl_empname)) ------在查询employee表中使用索引cl_empname,()里的是索引名。
查看索引信息:
sp_helpindex 'employee' ------使用sp_helpindex系统存储过程来查看表employee的索引信息
删除索引:
drop index employee.cl_empname ------使用drop index来删除employee表中的cl_empname索。(注意:drop index不适用于primary key或unique约束创建的索引,也不能用于删除系统表的索引)
索引的优点:
1、通过创建唯一性索,可以保证数据库表中每一行数据的唯一性。
2、可以大大加快数据的检索速度,这也是创建索的最主要原因。
3、可以加束表与表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
4、使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
5、通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
阅读(699) | 评论(1) | 转发(0) |