MSSQL教程之创立索引
因此我们的保存数据方法就是:在删除的动作开始之前,把表数据备份起来,然后留一个空表,在空表上执行“删除”操作。8.2.1用CREATEINDEX命令创立索引CREATEINDEX既能够创立一个可改动表的物理按次的簇索引,也能够创立进步查询功能的非簇索引。其语法以下:
CREATE
INDEXindex_nameON{table|view}column[,...n])
[WITH
[[,]FILLFACTOR=fillfactor]
[[,]IGNORE_DUP_KEY]
[[,]DROP_EXISTING]
[[,]STATISTICS_NORECOMPUTE]
[[,]SORT_IN_TEMPDB]
]
各参数申明以下:<P>
[*]UNIQUE
创立一个唯一索引,即索引的键值不反复。在列包括反复值时,不克不及建唯一索引。如要利用此选项,则应断定索引所包括的列均不同意NULL值,不然在利用时会常常堕落。
[*]CLUSTERED
指明创立的索引为簇索引。假如此选项缺省,则创立的索引为非簇索引。
[*]NONCLUSTERED
指明创立的索引为非簇索引其索引。数据页中包括了指向数据库中实践的表数据页的指针。
[*]index_name
指定所创立的索引的称号。索引称号在一个表中应是唯一的,但在统一数据库或分歧数据库中能够反复。
[*]table
指定创立索引的表的称号。需要时还应指明数据库称号和一切者称号。
[*]view
指定创立索引的视图的称号。视图必需是利用SCHEMABINDING选项界说过的,其详细信息请拜见“视图创立”章节。
[*]ASC|DESC
指定特定的索引列的排序体例。默许值是升序(ASC)。
[*]column
指定被索引的列。假如利用两个或两个以上的列构成一个索引,则称为复合索引。一个索引中最多能够指定16个列,但列的数据范例的长度和不克不及凌驾900个字节。
[*]PAD_INDEX
指定添补索引的外部节点的行数,最少应年夜于即是两行。PAD_INDEX选项只要在FILLFACTOR选项指定后才起感化。由于PAD_INDEX利用与FILLFACTOR不异的百分比。缺省时,SQLServer确保每一个索引页最少有能包容一条最年夜索引行数据的余暇空间。假如FILLFACTOR指定的百分比不敷包容一行数据S,QLServer会主动外部变动百分比。
[*]FILLFACTOR=fillfactor
FILLFACTOR称为添补因子,它指定创立索引时,每一个索引页的数据占索引页巨细的百分比,fillfactor的值为1到100。它实在同时指出了索引页保存的自在空间占索引页巨细的百分比。即100-fillfactor。关于那些频仍举行大批数据拔出或删除的表在建索引时应当为未来天生的索引数据预留较年夜的空间,行将fillfactor设得较小,不然,索引页会因数据的拔出而很快填满,并发生分页,而分页会年夜年夜增添体系的开支。但假如设得太小,又会华侈大批的磁盘空间,下降查询功能。因而,关于此类表一般设一个约莫为10的fillfactor。而关于数据不变动的、高并发的、只读的表,fillfactor能够设到95以上以致100。
假如没有指定此选项,SQLServer默许其值为0。0是个特别值,与别的小FILLFACTOR
值(如:1,2)的意义分歧,其叶节点页被完整填满,而在索引页中另有一些空间。能够
用存储历程Sp_configure来改动默许的FILLFACTOR值。
[*]IGNORE_DUP_KEY
此选项把持了当往包括于一个唯一束缚中的列中拔出反复数据时SQLServer所作的反响。中选择此选项时,SQLServer前往一个毛病信息,跳过此行数据的拔出,持续实行上面的拔出数据的操纵:当没选择此选项时,SQLServer不但会前往一个毛病信息,还会回滚(RollsBack)全部INSERT语句(关于回滚,请拜见“数据库更新”章节中的“事件”一节)。
[*]DROP_EXISTING
指定要删除偏重新创立簇索引。删除簇索引会招致一切的非簇索引被重修,由于必要用行指针来交换簇索引键。假如再重修簇索引,那末非簇索引又会再重修一次,以便用簇索引键来交换行指针。利用DROP_EXISTING选项可使非簇索引只重修一次。
[*]STATISTICS_NORECOMPUTE
指定散布统计不主动更新。必要手动实行不带NORECOMPUTE子句的UPDATESTATISTICS命令。
[*]SORT_IN_TEMPDB
指定用于创立索引的分类排序了局将被存储到Tempdb数据库中。假如Tempdb数据库和用户数据库位于分歧的磁盘设备上,那末利用这一选项能够削减创立索引的工夫,但它会增添创立索引所需的磁盘空间。
[*]ONfilegroup
指定寄存索引的文件组。
注重:数据范例为TEXT、NTEXT、IMAGE或BIT的列不克不及作为索引的列。
因为索引的宽度不克不及凌驾900个字节,因而数据范例为CHAR、VARCHAR、BINARY和VARBINARY的列的列宽度凌驾了900字节,或数据范例为NCHAR、NVARCHAR的列的列宽度凌驾了450个字节时也不克不及作为索引的列。
在利用索引创立导游创立索引时,不克不及将盘算列包括在索引中,但在间接创立或利用CREATEINDEX命令创立索引时,则能够对盘算机列创立索引,这在SQLServer2000之前的版本中是不同意的,算得上是一年夜改善。
例8-1:为表products创立一个簇索引。
createuniqueclusteredindexpk_p_id
onproducts(p_id)
with
pad_index,
fillfactor=10,
ignore_dup_key,
drop_existing,
statistics_norecompute
on
例8-2为表products创立一个复合索引
createindexpk_p_main
onproducts(p_id,p_name,sumvalue)--个中sumvalue是一个盘算列表达式为price*quantity
with
pad_index,
fillfactor=50
on
例8-3创立一个视图并为它建一个索引
createviewdbo.work_years
with
schemabinding
as
selecttop100percentemp_id,e_name,birthday,hire_date,year(getdate())
-year(hire_date)aswork_years
fromdbo.employee
orderbywork_yearsdesc
createuniqueclustered
indexemp_id_viewondbo.work_years(emp_id)
8.2.2用EnterpriseManager创立索引。
在EnterpriseManager中创立索引有两种办法
1用索引创立导游创立索引
创立办法以下:
(1)在目次树当选摘要创立索引的表地点的数据库,点击义务板中的导游页面
“Wizards”,呈现如-2所示的选择导游界面。
-2选择索引创立导游
(2)单击义务板中的“CreateanIndex”链接,呈现如-3所示的索引创立导游界面。也能够从“Tools”菜单当选择“izards”菜单项,则呈现如-17所示的选择SQLServer导游对话框,再从树型目次当选择“Database”下的“CreateIndexWizard”选项,也会呈现如-3所示的索引创立导游界面。
(3)单击“下一步”按钮,呈现如-4所示的界面,从当选摘要创立索引的表,及其所属的数据库。
(4)单击“下一步”按钮,呈现如-5所示的界面,它显现了所选择的表中已存在的索引的信息。假如表还没有创立过索引,则不会呈现此界面,而间接呈现如-6所示的界面。
(5)单击“下一步”按钮,呈现如-6所示的界面,它列出了表中的一切列的信息,从当选择创立索引的列。
(6)单击“下一步”按钮,呈现如-7所示的界面,它列出了可供选择的索引设置选项(有关索引选项的设置,请参考后面报告的CREATEINDEX命令)。(7)单击“下一步”按钮,呈现如-8所示的完成索引创立界面,在此能够指定所创立索引的称号,还能够调剂构成索引的列的按次。单击“完成”按钮,停止索引创立历程。体系会弹出一个创立索引乐成信息对话框。
2间接创立索引
选择要创立索引的表,单击右键,从快速菜单当选择“一切义务(AllTasks)”子菜单中的“ManageIndexes”选项,将会呈现如-9所示的索引办理对话框,个中列出了表中已存在的索引。选择“New”按钮,进进如-10所示的创立索引对话框。在-10中,输出要创立的索引的称号,再选择用于创立索引的列,并设置索引的各类选项(有关索引选项的设置,请参考后面报告的CREATEINDEX命令)。单击“OK”按钮,完成索引的创立。
两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。 记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。 可以动态传入参数,省却了动态SQL的拼写。 只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。 其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?! 你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。 having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。 SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
页:
[1]