3.索引的定义与删除
索引是行位置的列表,按一个或多个指定的内容来排序。索引通常用于加速对表的存取。索引数据可以与表数据存储在相同的表空间中,或存储在包含索引数据的单独表空间中。
索引的作用包括加快查询速度,这也是创建索引最主要的原因;通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
3.1创建索引
在SQL语言中,建立索引使用create index语句,其一般格式为
create [unique] [cluster] index<索引名>
on <基本表名> (<列名> [<次序>],[,<列名> [<次序>]]...);
复制
其中,unique表明要建立的是唯一索引,即每个索引值只对应唯一的数据记录。cluster表示建立的是聚集索引,聚集索引是指索引项的顺序与表中记录的物理顺序一致的索引组织,也就是说该索引中键值的逻辑顺序就是表中相应行的物理顺序。由于聚集索引规定了数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。用户可以在最近常要查询的列上建立聚集索引,这样可以提高查询的效率。索引可以建立在列或者多列之上,建立在多个列之上的素引可称为组合索引,各列名之间用逗号分隔。每个<列名>后面还可以用<次序>来指定索引值的升降排列次序,次序有ASC(升序)或DESC(降序)两种,缺省值为ASC。
例2:在商品信息(spxx)表的商品编号(spbh)列上创建一个唯一索引 PK_spxx。
create unique index PK_spxx on spxx (spxx ASC);
复制
例3:在商品信息(spxx)表中基于商品名称(spmc)升序和销售单价(xsdj)降序建立组合素引mc_dj,类型为唯一索引。
create unique index mc_dj on spxx (spmc ASC, xsdj DESC);
复制
需要注意的是,对于已含重复值的属性列不能建unique索引,对某个列建立unique索引后,插入新记录时数据库管理系统会自动检查新记录在该列上是否取了重复值,这相当于增加了一个unique约束。
3.2删除索引
索引建立好后,如果基本表中的数据发生变化,不需要用户的干预,数据库系统会自动维护索引,以保证索引的正确性。建立索引的目标是为了提高查询的效率,减少查询操作所需要的时间,但如果数据增加、删除、修改等操作很频繁,则系统需要花费很多时间来维护索引,此时可以删除一些不必要的索引,以减少系统维护索引所需要的开销。
在SQL中,用于删除索引的语句为drop index,语句格式为
drop index<索引名>;
复制
例4:删除商品信息(spxx)表中的索引mc_dj。
drop index spxx.mc_dj;
复制
需要注意的是,drop index语句格式中没有单独的<表名>,所以需要在索引名前加上表名,以指定是对哪个表进行操作。删除索引时,系统会从数据字典中删去有关该索引的描述。