SQL Server数据库技术(47)[MSSQL防范]
本文“SQL Server数据库技术(47)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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 所示的索引成立向导界面.
[1] [2] 下一页
(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" 按钮,完成索引的成立.
上一页 [1] [2]
以上是“SQL Server数据库技术(47)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:本文地址: | 与您的QQ/BBS好友分享! |