8.2.1 用CREATE INDEX 命令创建索引
CREATE INDEX 既可以创建一个可改变表的物理顺序的簇索引,也可以创建提高查询性能的非簇索引。其语法如下:
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX index_name ON {table | view } column [ ASC | DESC ] [,...n])
[WITH
[PAD_INDEX]
[ [, ] FILLFACTOR = fillfactor]
[ [, ] IGNORE_DUP_KEY]
[ [, ] DROP_EXISTING]
[ [, ] STATISTICS_NORECOMPUTE]
[ [, ] SORT_IN_TEMPDB ]
]
[ON filegroup]
各参数说明如下:
注意:数据类型为TEXT、NTEXT、IMAGE或BIT的列不能作为索引的列。
由于索引的宽度不能超过900个字节,因此数据类型为CHAR、VARCHAR、BINARY和VARBINARY的列的列宽 度超过了900字节,或数据类型为NCHAR、NVARCHAR的列的列宽度超过了450个字节时也不能作为索引的列。
在使用索引创建向导创建索引时,不能将计算列包含在索引中,但在直接创建或使用CREATE INDEX命令创建索引时,则可以对计算机列创建索引,这在SQL Server2000以前的版本中是不允许的,算得上是一大改进。
例8-1: 为表products 创建一个簇索引。
create unique clustered index pk_p_id
on products(p_id)
with
pad_index,
fillfactor = 10,
ignore_dup_key,
drop_existing,
statistics_norecompute
on [primary]
例8-2 为表products 创建一个复合索引
create index pk_p_main
on products(p_id, p_name, sumvalue) --其中sumvalue 是一个计算列表达式为price*quantity
with
pad_index,
fillfactor = 50
on [primary]
例8-3 创建一个视图并为它建一个索引
create view dbo.work_years
with
schemabinding
as
select top 100 percent emp_id,e_name, birthday, hire_date, year(getdate())
- year(hire_date) as work_years
from dbo.employee
order by work_years desc
create unique clustered
index emp_id_view on dbo.work_years (emp_id)
(4) 单击“下一步”按钮,出现如图8-5 所示的界面,它显示了所选择的表中已经存在的索引的信息。如果表还没有创建过索引,则不会出现此界面,而直接出现如图8-6 所示的界面。
(5) 单击“下一步”按钮,出现如图8-6 所示的界面,它列出了表中的所有列的信息,从中选择创建索引的列。
(6) 单击“下一步”按钮,出现如图8-7 所示的界面,它列出了可供选择的索引设置选项(有关索引选项的设置,请参考前面讲述的CREATE INDEX 命令)。
(7) 单击“下一步”按钮,出现如图8-8 所示的完成索引创建界面,在此可以指定所创建索引的名称,还可以调整组成索引的列的顺序。单击“完成”按钮,结束索引创建过程。系统会弹出一个创建索引成功信息对话框。
2 直接创建索引
选择要创建索引的表,单击右键,从快捷菜单中选择“所有任务(All Tasks)”子菜单中的“Manage Indexes”选项,将会出现如图8-9 所示的索引管理对话框,其中列出了表中已经存在的索引。选择“New” 按钮,进入如图8-10 所示的创建索引对话框。在图8-10中,输入要创建的索引的名称,再选择用于创建索引的列,并设置索引的各种选项(有关索引选项的设置,请参考前面讲述的CREATE INDEX 命令)。单击“OK” 按钮,完成索引的创建。
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |