首页 | 注册 | 登陆
首页 >> 技术专栏 >> 数据库 >> mssql基础 

创建索引


作者爱心 来源爱心 加入时间:2006年02月18日
摘要:


8.2.1 用CREATE INDEX 命令创建索引
CREATE INDEX 既可以创建一个可改变表的物理顺序的簇索引,也可以创建提高查询性能的非簇索引。其语法如下:
CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]
INDEX in…


转载:转载请保留本信息,本文来自
http://www.51dibs.com
/html/2006/article/info1/a_68a21541ea4fce85.htm




创建索引


站点:爱心种子小博士 关键字:创建索引




创建索引


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]
各参数说明如下:

  • UNIQUE
    创建一个惟一索引,即索引的键值不重复。在列包含重复值时,不能建惟一索引。如 要使用此选项,则应确定索引所包含的列均不允许NULL 值,否则在使用时会经常出错。
  • CLUSTERED
    指明创建的索引为簇索引。如果此选项缺省,则创建的索引为非簇索引。
  • NONCLUSTERED
    指明创建的索引为非簇索引其索引。数据页中包含了指向数据库中实际的表数据页的 指针。
  • index_name
    指定所创建的索引的名称。索引名称在一个表中应是惟一的,但在同一数据库或不同 数据库中可以重复。
  • table
    指定创建索引的表的名称。必要时还应指明数据库名称和所有者名称。
  • view
    指定创建索引的视图的名称。视图必须是使用SCHEMABINDING 选项定义过的,其具体信息请参见“视图创建”章节。
  • ASC | DESC
    指定特定的索引列的排序方式。默认值是升序(ASC)。
  • column
    指定被索引的列。如果使用两个或两个以上的列组成一个索引,则称为复合索引。一个索引中最多可以指定16 个列,但列的数据类型的长度和不能超过900 个字节。
  • PAD_INDEX
    指定填充索引的内部节点的行数,至少应大于等于两行。PAD_INDEX 选项只有在FILLFACTOR 选项指定后才起作用。因为PAD_INDEX 使用与FILLFACTOR 相同的百分比。缺省时,SQL Server 确保每个索引页至少有能容纳一条最大索引行数据的空闲空间。如果FILLFACTOR 指定的百分比不够容纳一行数据S,QL Server 会自动内部更改百分比。
  • FILLFACTOR = fillfactor
    FILLFACTOR 称为填充因子,它指定创建索引时,每个索引页的数据占索引页大小 的百分比,fillfactor 的值为1 到100。它其实同时指出了索引页保留的自由空间占索引页 大小的百分比。即100 - fillfactor。 对于那些频繁进行大量数据插入或删除的表在建索 引时应该为将来生成的索引数据预留较大的空间,即将fillfactor 设得较小,否则,索引 页会因数据的插入而很快填满,并产生分页,而分页会大大增加系统的开销。但如果设得 过小,又会浪费大量的磁盘空间,降低查询性能。因此,对于此类表通常设一个大约为10 的fillfactor。 而对于数据不更改的、高并发的、只读的表,fillfactor 可以设到95 以上乃 至100。

    如果没有指定此选项,SQL Server 默认其值为0 。0 是个特殊值,与其它小FILLFACTOR
    值(如:1,2)的意义不同,其叶节点页被完全填满,而在索引页中还有一些空间。可以
    用存储过程Sp_configure 来改变默认的FILLFACTOR 值。
  • IGNORE_DUP_KEY
    此选项控制了当往包含于一个惟一约束中的列中插入重复数据时SQL Server 所作的反应。当选择此选项时,SQL Server 返回一个错误信息,跳过此行数据的插入,继续执行下面的插入数据的操作:当没选择此选项时,SQL Server 不仅会返回一个错误信息,还会回滚(Rolls Back)整个INSERT 语句(关于回滚,请参见“数据库更新”章节中的“事务”一节)。
  • DROP_EXISTING
    指定要删除并重新创建簇索引。删除簇索引会导致所有的非簇索引被重建,因为需要用行指针来替换簇索引键。如果再重建簇索引,那么非簇索引又会再重建一次,以便用簇索引键来替换行指针。使用DROP_EXISTING 选项可以使非簇索引只重建一次。
  • STATISTICS_NORECOMPUTE
    指定分布统计不自动更新。需要手动执行不带NORECOMPUTE 子句的UPDATESTATISTICS 命令。
  • SORT_IN_TEMPDB
    指定用于创建索引的分类排序结果将被存储到Tempdb 数据库中。如果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)

8.2.2 用Enterprise Manager 创建索引。
在Enterprise Manager 中创建索引有两种方法
1 用索引创建向导创建索引
创建方法如下:
(1) 在目录树中选择要创建索引的表所在的数据库,点击任务板中的向导页面
“Wizards”,出现如图8-2 所示的选择向导界面。

图8-2 选择索引创建向导

(2) 单击任务板中的“Create an Index” 链接,出现如图8-3 所示的索引创建向导 界面。也可以从“Tools ”菜单中选择“izards” 菜单项,则出现如图5-17 所 示的选择SQL Server 向导对话框,再从树型目录中选择“Database”下的“Create Index Wizard”选项,也会出现如图8-3 所示的索引创建向导界面。

(3) 单击“下一步”按钮,出现如图8-4 所示的界面,从中选择要创建索引的表,及其所属的数据库。

(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” 按钮,完成索引的创建。






发布人:love
→ 推荐给我的好友 → 报告错误链接
上篇文章:数据库索引
下篇文章:查看与修改索引
〖文章打印〗
〖关闭窗口〗
发表评论
查看评论
中“创建索引”相关内容 中“创建索引”相关内容
中“创建索引”相关内容 中“创建索引”相关内容
中“创建索引”相关内容 中“创建索引”相关内容

关于我们网站留言友情链接与我在线与我聊天领取红包管理TOP
客户服务中心信箱:[email protected] 网站地图

声明