数据库中创建索引
2023-04-26 · 百度认证:重庆猪八戒网络有限公司官方账号
为给定表或视图创建索引。
只有表或视图的所有者才能为表创建索引。表或视图的所有者可以随时创建索引,无论表中是否有数据。可以通过指定限定的数据库名称,为另一个数据库中的表或视图创建索引。语法
CREATE[UNIQUE][CLUSTERED|]INDEXindex_name
ON{table|view}(column[ASC|DESC][,...n])
[WITH
[ONfilegroup]
{PAD_INDEX|
FILLFACTOR=fillfactor|
IGNORE_DUP_KEY|
DROP_EXISTING|
STATISTICS_NORECOMPUTE|
SORT_IN_TEMPDB
}参数
UNIQUE为表或视图创建唯一索引(不允许存在索引值相同的两行)。视图上的聚集索引必须是UNIQUE索引。在创建索引时,如果数据已存在,Microsoft?SQLServer?会检查是否有重复值,并在每次使用INSERT或UPDATE语句添加数据时进行这种检查。如果存在重复的键值,将取消CREATEINDEX语句,并返回错误信息,给出第一个重复值。当创建UNIQUE索引时,有多个NULL值被看作副本。如果存在唯一索引,那么会产生重复键值的UPDATE或INSERT语句将回滚,SQLServer将显示错误信息。即使UPDATE或INSERT语句更改了许多行但只产生了一个重复值,也会出现这种情况。如果在有唯一索引并且指定了IGNORE_DUP_KEY子句情况下输入数据,则只有违反UNIQUE索引的行才会失败。在处理UPDATE语句时,IGNORE_DUP_KEY不起作用。SQLServer不允许为已经包含重复值的列创建唯一索引,无论是否设置了IGNORE_DUP_KEY。如果尝试这样做,SQLServer会显示错误信息;重复值必须先删除,才能为这些列创建唯一索引。CLUSTERED创建一个对象,其中行的物理排序与索引排序相同,并且聚集索引的最低一级(叶级)包含实际的数据行。一个表或视图只允许同时有一个聚集索引。具有聚集索引的视图称为索引视图。必须先为视图创建唯一聚集索引,然后才能为该视图定义其它索引。在创建任何非聚集索引之前创建聚集索引。创建聚集索引时重建表上现有的非聚集索引。如果没有指定CLUSTERED,则创建非聚集索引。说明因为按照定义,聚集索引的叶级与其数据页相同,所以创建聚集索引时使用ONfilegroup子句实际上会将表从创建该表时所用的文件移到新的文件组中。在特定的文件组上创建表或索引之前,应确认哪些文件组可用并且有足够的空间供索引使用。文件组的大小必须至少是整个表所需空间的1.2倍,这一点很重要。