索引是定义在存储表(Table)的基础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储机构,由一系列存储在磁盘上的索引项(index entries)组成,每一索引项又由两部分构成:索引字段和行指针
存储索引项的文件为索引文件,存储表称为主文件。
索引的存在与否不改变存储表的物理存储结构,其目的是可以明显提高存储表的访问速度。
索引文件组织方式有两种:
排序索引文件:按索引字段值的某一顺序组织存储
散列索引文件:依据索引字段值使用散列函数分配散列桶的方式存储。
(主文件组织有堆文件、排序文件、散列文件、聚簇文件等)
索引字段的值可以是Table中的任何一个属性的值或者多个属性值的组合值。
索引文件比主文件小很多,通过检索一个小的索引文件(可全部装载进进内存),快速定位后,再有针对性的读取非常大的主文件中的有关记录。
索引技术应用使检索效率大幅度提高,但同时也增加了存储空间、使维护负担加重(要同时维护主文件和索引文件)
衡量索引性能好坏:
访问时间、插入时间、删除时间、空间负载、支持存取的有效性(比如:支持的是属性的限定值还是支持属性的限定范围的值)
对经常出现在检索条件、连接条件、分组计算条件中的属性可建立索引。
SQL语言关于索引
1.基本知识
当定义Table后,如果定义了主键,则系统将自动创建主索引,利用主索引对Table进行快速定位、检索与更新操作。
当索引被创建后,无论是主索引还是用户创建的索引,DBMS都将自动维护所有的索引。
当Table被删除后(drop table),定义在该Table上的所有索引将自动被撤销。
2.创建和维护索引的SQL语句
创建索引:
CREATE [UNIQUE] INDEX indexname
ON tablename ( colname[asc|desc] ...);
【一般默认是asc,表示从小到大排序;desc表示从大到小排序】
示例:在student表中创建一个基于Sname的索引
create index idxSname on student(sname);
示例:在student表中创建一个基于Sname和Sclass的索引
create index idxSnamcl on student(sname,sclass);
示例:撤销用户创建的索引
drop index indexname;