最近比较忙,今天终于挤出了时间来温习 数据库之索引。
数据库中的索引与书中的目录一样,可以快速找到表中的特定行。索引是与表关联的存储在磁盘上的单独结构,它包含由表中的一列或多列生成的键,以及映射到指定表行的存储位置的指针,这些键存储在一个结构(B树)中,使 SQL Server 可以快速有效地查找与键值关联的行。
建立索引的作用如下:
● 提高查询速度。
● 保证数据记录的唯一性。
● 查询优化依靠索引起作用。
● 提高ORDER BY、GROUP BY执行速度。
在聚集索引中,索引的顺序决定数据表中记录行的顺序,由于数据表中记录行经过排序,所以每个表只能有一个聚集索引。
表列定义了 PRIMARY KEY 约束和 UNIQUE 约束时,会自动创建索引。例如,如果创建了表并将一个特定列标识为主键,则 数据库引擎自动对该列创建 PRIMARY KEY 约束和索引。
在非聚集索引中,索引的结构完全独立于数据行的结构,数据表中记录行的顺序和索引的顺序不相同,索引表仅仅包含指向数据表的指针,这些指针本身是有序,用于在表中快速定位数据行。一个表可以有多个非聚集索引。
这里不是图形化操作创建索引的介绍。
使用T-SQL中的CREATE INDEX 语句为表创建索引,其语法格式如下:
CREATE [ UNIQUE ] / *指定索引是否唯一*/ [ CLUSTERED | NONCLUSTERED ] /*索引的组织方式*/ INDEX index_name /*索引名称*/ ON {[ database_name. [ schema_name ] . | schema_name. ] table_or_view_name}( column [ ASC | DESC ] [ ,...n ] ) /*索引定义的依据*/ [ INCLUDE ( column_name [ ,...n ] ) ] [ WITH ( <relational_index_option> [ ,...n ] ) ] /*索引选项*/ [ ON { partition_scheme_name ( column_name ) /*指定分区方案*/ | filegroup_name /*指定索引文件所在的文件组*/ | default}] [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ] /*指定FILESTREAM数据的位置*/[ ; ]参数说明:
UNIQUE:表示表或视图创建唯一性索引。 CLUSTERED | NONCLUSTERED:指定聚集索引还是非聚集索引。 index_name:指定索引名称。 column:指定索引列。 ASC | DESC:指定升序还是降序。 INCLUDE子句:指定要添加到非聚集索引的叶级别的非键列。 WITH子句:指定定义的索引选项。 ON partition_scheme_name:指定分区方案 ON filegroup_name:为指定文件组创建指定索引 ON default:为默认文件组创建指定索引使用示例
例如:在stsc数据库中score表的grade列上,创建一个非聚集索引idx_grade。
USE stsc CREATE INDEX idx_grade ON score(grade)
例如:在stsc数据库中score表的sno列和cno列,创建一个唯一聚集索引idx_sno_cno。
USE stsc CREATE UNIQUE CLUSTERED INDEX idx_sno_cno ON score(stno,cno)说明:如果在创建唯一聚集索引的 idx_sno_cno前已经 创建了主键索引,则创建索引idx_sno_cno失败,可在创建新聚集索引的前删除现有的聚集索引。
-----------------索引的查看
查看索引信息使用系统存储过程 sp_helpindex,其语法格式如下:
sp_helpindex [ @objname = ] 'name'其中,'name'为需要查看的索引的表
例如:使用系统存储过程sp_helpindex 查看 student表上创建的索引
USE stsc GO EXEC sp_helpindex student GO执行结果:
修改索引信息使用ALTER INDEX 语句,其语法格式如下:
ALTER INDEX { index_name | ALL } ON <object> { REBUILD [ [PARTITION = ALL] [ WITH rebuild_index_option> [ ,...n ] ) ]} … }说明:
● REBUILD:重建索引。
● rebuild_index_option:重建索引选项。
使用示例
例如:修改创建的索引idx_grade,将填充因子改为80。
USE stsc ALTER INDEX idx_grade ON score REBUILD WITH (PAD_INDEX=ON, FILLFACTOR=80) GO <span style="font-family:Microsoft YaHei;font-size:12px;color:#3333ff;"><strong> </strong></span>
使用T-SQL语句中的 DROP INDEX 语句删除索引,其语法格式如下:
DROP INDEX { index_name ON table_or_view_name [ ,...n ] | table_or_view_name.index_name [ ,...n ] }使用示例
例如:删除已经创建的索引idx_grade
USE stsc DROP INDEX score.idx_grade
其实,明白知识点很简单,重要是怎么将自己明白的与动手结合起来,个人觉得这个关键呢。提醒自己:下来一定要 多去sql server management studio 练手,不练,这些都是瞎扯。