SQL Server-索引的创建和删除
摘要
通过索引可以快速访问表中的记录,大大提高了数据库的查询性能。本篇介绍创建、更新、删除索引的方法。
索引
索引是对数据库表中一个或多个列的值进行排序的逻辑结构。每个索引都有一个特定的搜索码与表中的记录关联。索引按顺序存储搜索码的值。
使用索引能够快速访问表中的记录,提高查询速度。何时使用索引由SQL Server DMBS确定。
索引类型及特点
SQL Server有两种类型的索引:聚簇索引和非聚簇索引。
1.聚簇索引
聚簇索引指示表中数据行按索引键的排序次序存储。在SQL Server中,如果该表上尚未创建聚簇索引,且在创建PRIMARY KEY约束时未指定非聚簇索引,系统会自动在此PRIMARY KEY键上创建聚簇索引。
聚簇索引的特点如下:
- 每个表只能有一个聚簇索引。
- 聚簇索引改变数据的物理排序方式,使得数据行的物理顺序和索引中的键值顺序是一致的。所以,应该在创建任何非聚簇索引之前创建聚簇索引。
2.非聚簇索引
非聚簇索引具有完全独立于数据行的结构。数据表中的数据行不按索引键的次序存储。在非聚簇索引中,每个索引都有指针指向包含该键值的数据行。
非聚簇索引的特点如下:
- 如果创建索引时没有指定索引类型,默认情况下为非聚簇索引。
- 应当在创建非聚簇索引之前创建聚簇索引。
- 每个表最多可以创建259个非聚簇索引。
- 包含索引的所有长度固定列的最大大小为900B。
- 包含在同一索引中的列的最大数目为16。
- 最好在唯一值较多的列上创建非聚簇索引。
使用索引的准则
业务规则﹑数据特征和数据的使用决定了创建索引的列。一般情况下,应当在经常被查询的列上创建索引,以便提高查询速度。但索引将占用磁盘空间,并且降低添加、删除更新行的速度。
1.创建查询的列
- 主关键字所在的列。
- 外部关键字所在的列或在连接查询中经常使用的列。
- 按关键字的范围值进行搜索的列。
- 按关键字的排序顺序访问的列。
2.不使用索引的列
- 在查询中很少涉及的列。
- 包含较少的唯一值。
- 更新性能比查询性能更重要的列。
- 有text , ntext或image数据类型定义的列。
创建索引
1.交互式为表创建,则在此主键自动创建聚簇索引。
用表设计器打开数据库jxsk中的表SC,在SC表设计器中,右击,选择“索引/键”选项,打开“索引/键”对话框。此时窗口中内容为空,说明表SC中没有创建任何索引。单击“关闭”按钮,返回表设计器。
同时选中列SNO和列CNO,单击工具栏中的“🔑”按钮,即在SNO和CNO上创建了主键。
在SC表设计器中,右击,选择“索引/键”选项,打开“索引/键”对话框,查看列表中的信息:索引“列”是SNO(ASC)和CNO(ASC),当前的索引“名称”为PK_SC,“创建为聚集的”为“是”。此索引即是创建主键时,系统自动生成的聚簇索引。
2.用create语句为表按降序创建聚簇索引
create clustered index IND_TNO on T(TNO desc)
3.交互式为表按升序和降序创建非聚簇索引
在SQL Server Management Studio中,用表设计器打开数据库jxsk 中的数据库表T。在表设计器中,右击,选择“索引/键”选项,打开“索引/键”对话框。
单击“添加”按钮﹐观察“索引/键”对话框中各项的变化。在右侧列表中,单击“列”行中的一个单元格,再单击该行右端的“…”按钮,打开“索引列”对话框﹐TNO列上按升序和在AGE列上按降序创建非聚簇索引。设置完成后单击“确定”按钮返回“索引/键”对话框。
在“索引/键”对话框中,将“名称”设置为IND_TNO_AGE,关闭对话框后保存修改。
4.用create语句为表按升序创建唯一索引
create unique index IND_CN on C (CN asc)
删除索引
1.交互式删除表中的索引
在SQL Server Management Studio 中,用表设计器打开数据库表C。
单击工具栏中的“表设计器”按钮,选择“索引/键”选项,打开“索引/键”对话框,可以看到表C中存在上面创建的索引。
选定要删除的索引IND_CN,单击删除按钮,即删除成功。
2.用drop语句删除表中的索引
drop index IND_TNO_AGE on T