最近比较忙,今天终于挤出了时间来温习 数据库之索引。
-------------------概述
数据库中的索引与书中的目录一样,可以快速找到表中的特定行。索引是与表关联的存储在磁盘上的单独结构,它包含由表中的一列或多列生成的键,以及映射到指定表行的存储位置的指针,这些键存储在一个结构(B树)中,使 SQL Server 可以快速有效地查找与键值关联的行。
建立索引的作用如下:
● 提高查询速度。
● 保证数据记录的唯一性。
● 查询优化依靠索引起作用。
● 提高ORDER BY、GROUP BY执行速度。
--------------------索引的分类
1,聚集索引
在聚集索引中,索引的顺序决定数据表中记录行的顺序,由于数据表中记录行经过排序,所以每个表只能有一个聚集索引。
表列定义了 PRIMARY KEY 约束和 UNIQUE 约束时,会自动创建索引。例如,如果创建了表并将一个特定列标识为主键,则 数据库引擎自动对该列创建 PRIMARY KEY 约束和索引。
2,非聚集索引
在非聚集索引中,索引的结构完全独立于数据行的结构,数据表中记录行的顺序和索引的顺序不相同,索引表仅仅包含指向数据表的指针,这些指针本身是有序,用于在表中快速定位数据行。一个表可以有多个非聚集索引。
------------------------索引的创建
这里不是图形化操作创建索引的介绍。
使用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 练手,不练,这些都是瞎扯。