精华内容
下载资源
问答
  • 在执行语句时 CREATE UNIQUE CLUSTERED INDEX ...无法对视图 "XXXXX" 创建 索引,因为它使用了 LEFT、RIGHT 或 FULL OUTER 联接,而在索引视图中不允许使用 OUTER 联接。请考虑使用 INNER 联接。 这要怎么处理呢?
  • 聚集索引对于从表中检索一定范围的数据值非常有用。非聚集索引最适于检索特定行,而聚集索引最适于检索一定范围的行。但是,由于每个表只允许使用一个聚集索引,因此按照这个简单的逻辑来确定要创建哪种类型的索引并...

    聚集索引对于从表中检索一定范围的数据值非常有用。非聚集索引最适于检索特定行,而聚集索引最适于检索一定范围的行。但是,由于每个表只允许使用一个聚集索引,因此按照这个简单的逻辑来确定要创建哪种类型的索引并不总能成功。对于该问题有一个简单的物理原因。对于聚集索引 B 树结构的上部(非叶层),如果像对它们的非聚集索引部分那样组织,则聚集索引的底层由表的实际 8 KB 数据页组成。但这种情况有一个例外,那就是在视图的基础上创建聚集索引时。因为将在下面介绍索引视图,所以我们将讨论针对实际表创建的聚集索引。在针对表创建聚集索引时,会按与索引搜索键相同的顺序读取与该表关联的数据、对这些数据进行排序,并会在物理上将它们存回数据库。因为该表的数据只能按照一种顺序保存到存储器中,不会导致重复,所以符合一个聚集的限制。
    聚集索引和性能
    聚集索引有一些会影响性能的固有特征。
    在使用聚集索引根据搜索键来检索 SQL Server 数据时,不需要指针跳转(会导致硬盘上的位置可能不按顺序更改)来检索关联的数据页。这是由于聚集索引的叶层实际上就是关联的数据页。
    如前所述,叶层(当然也包括表或索引视图的数据)在物理上会按照与搜索键相同的顺序进行排序和存储。因为聚集索引的叶层包含表的实际 8 KB 数据页,所以整个表的行数据会按照由聚集索引确定的顺序以物理方式排列在磁盘驱动器上。这就会在根据聚集索引的值从该表中提取大量行(至少大于 64 KB)时带来潜在的 I/O 性能优势,因为使用的是顺序磁盘 I/O(除非该表上发生了页拆分,这种情况将在题为“FILLFACTOR 和 PAD_INDEX”的一节中讨论)。正因为如此,所以在检索大量行时,一定要根据将用于执行范围扫描的列来对表选取聚集索引。
    表中与聚集索引相关联的行必须按照与索引搜索键相同的顺序排序和存储,这一点具有以下意义:
    在您创建聚集索引时,表会被复制,表中的数据会被排序,然后,原来的表会被删除。所以,数据库中必须有足够的空闲空间来存放数据的副本。
    在默认情况下,会在创建索引时对表中的数据进行排序。但是,如果数据已按正确顺序排过序,则会自动跳过排序操作。这样就可以显著加快索引创建过程。
    将数据装载到表中时的顺序应尽可能与您计划用于生成聚集索引的搜索键的顺序相同。对于大表(例如那些通常会成为数据仓库特征的表),该方法将大大加速索引创建过程,从而缩短您处理初始数据装载所需的时间。只要表中的行仍保持未创建聚集索引时所排的顺序,就可以在除去和重建聚集索引时可以使用该方法。任何行排序有误,操作都会被取消,会出现相应的错误信息,而且不会创建索引。
    同样,针对排过序的数据生成聚集索引时所需要的 I/O 也少得多,这是因为不必复制数据、对数据进行排序、将数据存回数据库,然后删除旧表数据,而是会将数据留在原来分配给它的扩展盘区中。索引扩展盘区只是添加到数据库中来存储顶层节点和中间节点。
    注意 针对大表生成索引的首选方法是:先生成聚集索引,然后生成非聚集索引。这样,就不会因为数据移动而需要重新生成非聚集索引。在除去所有索引时,首先会除去非聚集索引,最后除去聚集索引。这样,就不需要重新生成索引。
    非聚集索引
    非聚集索引最适于根据特定的键值,从大型 SQL Server 表中提取少数几个具有良好选择性的行。如前所述,非聚集索引是由 8 KB 索引页形成的二进制树。索引页二进制树的底层或叶层包含组成该索引的列中的所有数据。在使用非聚集索引根据键值的匹配项从表中检索信息时,会遍历索引的 B 树,直到在索引的叶层找到键的匹配项。如果需要表中不构成索引的列,指针就会跳转。这种指针跳转将有可能需要针对磁盘执行非顺序 I/O 操作。它甚至可能需要从另一磁盘中读取数据,尤其是在表及其伴随的索引 B 树很大时。如果多个指针指向同一个 8 KB 数据页,对 I/O 性能的影响就会比较小,因为只需将该页读入数据缓存一次。如果 SQL 查询涉及到用非聚集索引进行搜索,则对于对该查询返回的每一行,至少需要一次指针跳转。
    注意 由于指针每次跳转都会带来与之相关的开销,因此非聚集索引更适于处理从表中只返回一行或几行的查询。聚集索引更适于处理需要一系列行的查询。
    聚集索引和非聚集索引均可用于强制表内的唯一性,方法是在现有表上创建索引时指定 UNIQUE 关键字。确保表内唯一性的另一种方法是使用 UNIQUE 约束。如同唯一索引,UNIQUE 约束强制一组列中各值的唯一性。实际上,UNIQUE 约束的赋值自动创建基础唯一索引,以利于强制该约束。由于唯一性可以作为 CREATE TABLE 语句的一部分来加以定义和记录,因此,UNIQUE 约束通常优先于单独唯一索引的创建。

    索引视图
    索引视图是为了实现快速访问而将其结果持续存放于数据库内并创建索引的视图。与任何其他视图一样,索引视图也依靠基表来提供视图数据。此类相关性意味着,如果更改为索引视图提供数据的基表,索引视图可能变得无效。例如,重命名为视图提供数据的列会使该视图无效。为了避免此类问题,SQL Server 支持创建具有架构绑定的视图。架构绑定禁止对表或列进行任何会使视图无效的修改。使用视图设计器创建的索引视图自动获得架构绑定,因为 SQL Server 要求该索引视图具有架构绑定。架构绑定并不是说您不能修改视图;它的意思是您不能按更改视图结果集的方式来修改基础表或视图。另外,就像计算列上的索引一样,索引视图也必须有确定性、精确,且不得包含 text、ntext 或 image 等列。
    索引视图在基础数据不经常更新的情况下效果最佳。维护索引视图的成本可能高于维护表索引的成本。如果基础数据更新频繁,索引视图数据的维护成本就可能超过使用索引视图带来的性能收益。

    展开全文
  • 无法对视图创建聚集索引

    千次阅读 2013-05-13 17:53:42
    总结一下对视图创建聚集索引创建聚集索引的注意事项 一、视图必须绑定到架构。 要做到这点,在 CREATE VIEW 语句中,必须加上 WITH SCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击右键,属性,...

        CSDN广告是越来越多了,所有博客笔记不再更新,新网址 DotNet笔记

    今天遇到的

    无法在视图 'v_test' 上创建索引,因为该视图包含 text、ntext 或 image 列。


    总结一下对视图创建聚集索引创建聚集索引的注意事项


    一、视图必须绑定到架构。
    要做到这点,在 CREATE VIEW 语句中,必须加上 WITH SCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击右键,属性,选中“绑定到架构”。
    二、索引必须是唯一索引。
    要做到这点,在 CREATE INDEX 中必须指定 UNIQUE。
    三、索引必须是聚集索引。
    要做到这点,在 CREATE INDEX 中必须指定 CLUSTERED。
    例:
    CREATE VIEW viewFoo WITH SCHEMABINDING
    AS
    SELECT id...

    如果绑定架构了,就只需要如下:

    CREATE UNIQUE CLUSTERED INDEX index_viewFoo ON viewFoo(id)




    视图中的   SELECT   语句不能包含下列   Transact-SQL   语法元素:  
    选择列表不能使用   *   或   table_name.*   语法指定列。必须显式给出列名。  

    不能在多个视图列中指定用作简单表达式的表的列名。如果对列的所有(或只有一个例外)引用是复杂表达式的一部分或是函数的一个参数,则可多次引用该列。例如,下列选择列表是非法的:  
    SELECT   ColumnA,   ColumnB,   ColumnA


    执行   CREATE   INDEX   语句的用户必须是视图的所有者。  
    当执行   CREATE   INDEX   语句时,下列   SET   选项必须设置为   ON:  
    ANSI_NULLS  
    ANSI_PADDING  
    ANSI_WARNINGS  
    ARITHABORT  
    CONCAT_NULL_YIELDS_NULL  
    QUOTED_IDENTIFIERS  
    必须将选项   NUMERIC_ROUNDABORT   选项设置为   OFF。  
    视图不能包含   text、ntext   或   image   列,即使在   CREATE   INDEX   语句中没有引用它们。  
    如果视图定义中的   SELECT   语句指定了一个   GROUP   BY   子句,则唯一聚集索引的键只能引用在   GROUP   BY   子句中指定的列。



    摘自:原文点击打开链接

    展开全文
  • SQLServer之创建唯一聚集索引

    千次阅读 2018-09-18 17:03:35
    创建唯一聚集索引典型实现 唯一索引可通过以下方式实现: PRIMARY KEY 或 UNIQUE 约束 在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。...

    创建唯一聚集索引典型实现

    唯一索引可通过以下方式实现:

    • PRIMARY KEY 或 UNIQUE 约束

      在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。 主键列不允许空值。

      在创建 UNIQUE 约束时,默认情况下将创建唯一非聚集索引,以便强制 UNIQUE 约束。 如果不存在该表的聚集索引,则可以指定唯一聚集索引。

      有关详细信息,请参阅 Unique Constraints and Check Constraints 和 Primary and Foreign Key Constraints

    • 独立于约束的索引

      可以为一个表定义多个唯一非聚集索引。

      有关详细信息,请参阅 CREATE INDEX (Transact-SQL)

    • 索引视图

      若要创建索引视图,请对一个或多个视图列定义唯一聚集索引。 视图将执行,并且结果集存储在该索引的页级别中,其存储方式与表数据存储在聚集索引中的方式相同。 有关详细信息,请参阅 创建索引视图

    创建唯一聚集索引限制和局限

    • 如果数据中存在重复的键值,则不能创建唯一索引、UNIQUE 约束或 PRIMARY KEY 约束。

    • 唯一非聚集索引可以包括包含性非键列。 有关详细信息,请参阅 Create Indexes with Included Columns

    使用SSMS数据库管理工具创建唯一聚集索引

    使用表设计器创建唯一索引

    1、连接数据库,选择数据库,选择数据表-》右键点击数据表-》选择设计。

    2、在表设计器窗口-》选择要添加索引的数据列-》右键点击-》选择索引/键。

    3、在索引/键弹出款-》点击添加-》类型选择索引-》点击选择列。

    4、在索引列弹出框-》选择索引数据列-》选择索引排序方式-》可以添加多个索引列-》点击确定。

    5、在索引/键弹出框-》是唯一的选择是-》输入索引名称-》输入索引描述-》创建为聚集的选择为是-》其它可以选择默认或者自己设置-》点击关闭。

    6、点击保存(或者按下ctrl+s)-》关闭表设计器-》刷新表-》查看创建结果。

    使用对象资源管理器创建唯一索引

    1、连接数据库,选择数据库,选择数据表-》展开对象资源管理器-》右键点击索引-》点击新建索引-》选择聚集索引。

    2、在新建索引弹出框-》输入索引名称-》选择唯一创建为唯一聚集索引-》点击添加选择索引数据列。

    3、在表选择列弹出框中-》选择数据列,可以选择多个-》点击确定。

    4、在新建索引弹出框-》点击选项-》可以自行设置索引属性。

    5、在新建索引弹出框-》点击存储-》选择设置存储存储属性。

    6、在新建索引弹出框-》点击扩展属性-》添加扩展属性名称-》添加扩展属性值-》点击确定。

    7、查看创建结果。

    使用T-SQL脚本创建唯一聚集索引

    语法:

    --声明数据库引用
    use 数据库名;
    go

    --判断索引是否存在
    if exists(select * from sysindexes where name=索引名)
    drop index 索引名 on 表名 with (online=off);
    go

    --添加索引
    create 
    --[unique] --指定聚集索引是否唯一
    [clustered | nonclustered]  --指定为聚集索引
    index 索引名称 --索引名称
    on 表名  --索引添加在哪个表
    (列名 [asc | desc],列名 [asc | desc],...) --索引添加在哪个数据列
    with(

    --pad_index:指定索引填充
    --pad_index=on:FILLFACTOR 指定的可用空间百分比应用于索引的中间级页。
    --pad_index=off或未指定 fillfactor:考虑到中间级页上的键集,可以将中间级页几乎填满,但至少要为最大索引行留出足够空间。
    pad_index={ on | off },

    --statistics_norecompute:指定是否重新计算统计信息。
    --statistics_norecompute=on:过时的统计信息不会自动重新计算。
    --statistics_norecompute=off:启用自动统计信息更新。
    statistics_norecompute={ on | off },

    --sort_in_tempdb:指定是否将排序结果存储在 tempdb 中。
    --sort_in_tempdb=on:在tempdb中存储用于生成索引的中间排序结果。如果tempdb与用户数据库不在同一组磁盘上,就可缩短创建索引所需的时间。但是,这会增加索引生成期间所使用的磁盘空间量。
    --sort_in_tempdb=off:中间排序结果与索引存储在同一数据库中。
    sort_in_tempdb={ on | off },

    --ignore_dup_key:指定在插入操作尝试向唯一索引插入重复键值时的响应类型。 IGNORE_DUP_KEY 选项仅适用于创建或重新生成索引后发生的插入操作。 当执行 CREATE INDEX、ALTER INDEX 或 UPDATE 时,该选项无效。 默认为 OFF。
    --ignore_dup_key=on:打开,将重复键值插入唯一索引时会出现警告消息。只有违反唯一性的行为才会失败。
    --ignore_dup_key=off:关闭,将重复键值插入唯一索引时会出现错误消息。回滚整个INSERT操作。对于对视图创建的索引、非唯一索引、XML 索引、空间索引以及筛选的索引,IGNORE_DUP_KEY 不能设置为 ON
    ignore_dup_key={ on | off },

    --drop_existing:表示如果这个索引还在表上就 drop 掉然后在 create 一个新的。 默认为 OFF。
    --drop_existing=on:指定要删除并重新生成现有索引,其必须具有相同名称作为参数 index_name。
    --drop_existing=off:指定不删除和重新生成现有的索引。 如果指定的索引名称已经存在,SQL Server 将显示一个错误。
    drop_existing={ on | off },

    --online:指定在索引操作期间基础表和关联的索引是否可用于查询和数据修改操作。 默认为 OFF。 REBUILD 可作为 ONLINE 操作执行。
    --online=on:在索引操作期间不持有长期表锁。 在索引操作的主要阶段,源表上只使用意向共享 (IS) 锁。 
    --这使得能够继续对基础表和索引进行查询或更新。 
    --操作开始时,在很短的时间内对源对象持有共享 (S) 锁。
    --操作结束时,如果创建非聚集索引,将在短期内获取对源的 S(共享)锁;
    --当联机创建或删除聚集索引时,以及重新生成聚集或非聚集索引时,将在短期内获取 SCH-M(架构修改)锁。 但联机索引锁是短的元数据锁,特别是 Sch-M 锁必须等待此表上的所有阻塞事务完成。 
    --在等待期间,Sch-M 锁在访问同一表时阻止在此锁后等待的所有其他事务。 对本地临时表创建索引时,ONLINE 不能设置为 ON。
    --online=off:在索引操作期间应用表锁。这样可以防止所有用户在操作期间访问基础表。
    --创建、重新生成或删除聚集索引或者重新生成或删除非聚集索引的脱机索引操作将对表获取架构修改 (Sch-M) 锁。 
    --这样可以防止所有用户在操作期间访问基础表。 创建非聚集索引的脱机索引操作将对表获取共享 (S) 锁。 这样可以防止更新基础表,但允许读操作(如 SELECT 语句)。
    online={ on | off },

    --aloow_row_locks:指定是否允许行锁。
    --allow_row_locks=on:访问索引时允许行锁。数据库引擎确定何时使用行锁。
    --allow_row_locks=off:不使用行锁。
    allow_row_locks={ on | off }, 

    --allow_page_locks:指定是否允许使用页锁。
    --allow_page_locks=on:访问索引时允许页锁。数据库引擎确定何时使用页锁。
    -- allow_page_locks=off:不使用页锁。
    allow_page_locks={ on | off },

    --fillfactor=n:指定一个百分比,指示在数据库引擎创建或修改索引的过程中,应将每个索引页面的叶级填充到什么程度。 指定的值必须是 1 到 100 之间的整数。 默认值为 0。
    fillfactor=n

    --maxdop=max_degree_of_parallelism:在索引操作期间替代 max degree of parallelism 配置选项。 有关详细信息,请参阅 配置 max degree of parallelism 服务器配置选项。 使用 MAXDOP 可以限制在执行并行计划的过程中使用的处理器数量。 最大数量为 64 个处理器。
    --max_degree_of_parallelism 可以是:
    --1 - 取消生成并行计划。
    -->1 - 将并行索引操作中使用的最大处理器数量限制为指定数量。
    --0(默认值)- 根据当前系统工作负荷使用实际数量的处理器或更少数量的处理器。
    --有关详细信息,请参阅 配置并行索引操作。
    --maxdop=max_degree_of_parallelism,

    --data_compression=row:为指定的表、分区号或分区范围指定数据压缩选项。 选项如下所示:
    --none
    --不压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --row
    --使用行压缩来压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --page
    --使用页压缩来压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --columnstore
    --适用范围: SQL Server 2014 (12.x) 到 SQL Server 2017。
    --仅适用于列存储表。 COLUMNSTORE 指定对使用 COLUMNSTORE_ARCHIVE 选项压缩的分区进行解压缩。 还原数据时,将继续通过用于所有列存储表的列存储压缩对 COLUMNSTORE 索引进行压缩。
    --columnstore_archive
    --适用范围: SQL Server 2014 (12.x) 到 SQL Server 2017。
    --仅适用于列存储表,这是使用聚集列存储索引存储的表。 COLUMNSTORE_ARCHIVE 会进一步将指定分区压缩到更小。 这可用于存档,或者用于要求更少存储并且可以付出更多时间来进行存储和检索的其他情形
    --data_compression={ none | row | page | columnstore | columnstore_archive }

    --on partitions ( { <partition_number_expression> | <range> } [ ,...n ] ) 适用范围: SQL Server 2008 到 SQL Server 2017。
    --指定对其应用 DATA_COMPRESSION 设置的分区。 如果表未分区,ON PARTITIONS 参数将生成错误。 如果不提供 ON PARTITIONS 子句,DATA_COMPRESSION 选项将应用于已分区表的所有分区。
    --可以按以下方式指定 <partition_number_expression>:
    --提供一个分区号,例如:ON PARTITIONS (2)。
    --提供若干单独分区的分区号并用逗号将它们隔开,例如:ON PARTITIONS (1, 5)。
    --同时提供范围和单个分区,例如:ON PARTITIONS (2, 4, 6 TO 8)。
    --<range> 可以指定为以单词 TO 隔开的分区号,例如:ON PARTITIONS (6 TO 8)。
    --,请多次指定 DATA_COMPRESSION 选项 
    --on partitions(1-2)

    )
    on [primary];--数据空间规范
    go

    --添加注释
    execute sp_addextendedproperty N'MS_Description',N'索引说明',N'schema',N'dbo',N'table',N'表名',N'index',N'索引名称';
    go

    示例:

    --声明数据库应用
    use testss;
    go

    --判断是否存在索引
    if exists(select * from sysindexes where name='uniqueclus1')
    drop index uniqueclus1 on test1 with (online=off);
    go

    create 
    unique --唯一
    clustered --聚集索引 
    index --索引关键字
    uniqueclus1 --索引名称
    on test1 --索引建立在哪张表
    (name asc) --索引建立在哪个数据列
    with(

    --pad_index:指定索引填充
    --pad_index=on:FILLFACTOR 指定的可用空间百分比应用于索引的中间级页。
    --pad_index=off或未指定 fillfactor:考虑到中间级页上的键集,可以将中间级页几乎填满,但至少要为最大索引行留出足够空间。
    pad_index=on,

    --statistics_norecompute:指定是否重新计算统计信息。
    --statistics_norecompute=on:过时的统计信息不会自动重新计算。
    --statistics_norecompute=off:启用自动统计信息更新。
    statistics_norecompute=on,

    --sort_in_tempdb:指定是否将排序结果存储在 tempdb 中。
    --sort_in_tempdb=on:在tempdb中存储用于生成索引的中间排序结果。如果tempdb与用户数据库不在同一组磁盘上,就可缩短创建索引所需的时间。但是,这会增加索引生成期间所使用的磁盘空间量。
    --sort_in_tempdb=off:中间排序结果与索引存储在同一数据库中。
    sort_in_tempdb=off,

    --ignore_dup_key:指定在插入操作尝试向唯一索引插入重复键值时的响应类型。 IGNORE_DUP_KEY 选项仅适用于创建或重新生成索引后发生的插入操作。 当执行 CREATE INDEX、ALTER INDEX 或 UPDATE 时,该选项无效。 默认为 OFF。
    --ignore_dup_key=on:打开,将重复键值插入唯一索引时会出现警告消息。只有违反唯一性的行为才会失败。
    --ignore_dup_key=off:关闭,将重复键值插入唯一索引时会出现错误消息。回滚整个INSERT操作。对于对视图创建的索引、非唯一索引、XML 索引、空间索引以及筛选的索引,IGNORE_DUP_KEY 不能设置为 ON
    ignore_dup_key=off,

    --drop_existing:表示如果这个索引还在表上就 drop 掉然后在 create 一个新的。 默认为 OFF。
    --drop_existing=on:指定要删除并重新生成现有索引,其必须具有相同名称作为参数 index_name。
    --drop_existing=off:指定不删除和重新生成现有的索引。 如果指定的索引名称已经存在,SQL Server 将显示一个错误。
    drop_existing=off,

    --online:指定在索引操作期间基础表和关联的索引是否可用于查询和数据修改操作。 默认为 OFF。 REBUILD 可作为 ONLINE 操作执行。
    --online=on:在索引操作期间不持有长期表锁。 在索引操作的主要阶段,源表上只使用意向共享 (IS) 锁。 
    --这使得能够继续对基础表和索引进行查询或更新。 
    --操作开始时,在很短的时间内对源对象持有共享 (S) 锁。
    --操作结束时,如果创建非聚集索引,将在短期内获取对源的 S(共享)锁;
    --当联机创建或删除聚集索引时,以及重新生成聚集或非聚集索引时,将在短期内获取 SCH-M(架构修改)锁。 但联机索引锁是短的元数据锁,特别是 Sch-M 锁必须等待此表上的所有阻塞事务完成。 
    --在等待期间,Sch-M 锁在访问同一表时阻止在此锁后等待的所有其他事务。 对本地临时表创建索引时,ONLINE 不能设置为 ON。
    --online=off:在索引操作期间应用表锁。这样可以防止所有用户在操作期间访问基础表。
    --创建、重新生成或删除聚集索引或者重新生成或删除非聚集索引的脱机索引操作将对表获取架构修改 (Sch-M) 锁。 
    --这样可以防止所有用户在操作期间访问基础表。 创建非聚集索引的脱机索引操作将对表获取共享 (S) 锁。 这样可以防止更新基础表,但允许读操作(如 SELECT 语句)。
    online=off,

    --allow_row_locks:指定是否允许行锁。
    --allow_row_locks=on:访问索引时允许行锁。数据库引擎确定何时使用行锁。
    --allow_row_locks=off:不使用行锁。
    allow_row_locks=on,

    --allow_page_locks:指定是否允许使用页锁。
    --allow_page_locks=on:访问索引时允许页锁。数据库引擎确定何时使用页锁。
    --allow_page_locks=off:不使用页锁。
    allow_page_locks=on,

    --fillfactor=n:指定一个百分比,指示在数据库引擎创建或修改索引的过程中,应将每个索引页面的叶级填充到什么程度。 指定的值必须是 1 到 100 之间的整数。 默认值为 0。
    fillfactor=1,

    --maxdop=max_degree_of_parallelism:在索引操作期间替代 max degree of parallelism 配置选项。 有关详细信息,请参阅 配置 max degree of parallelism 服务器配置选项。 使用 MAXDOP 可以限制在执行并行计划的过程中使用的处理器数量。 最大数量为 64 个处理器。
    --max_degree_of_parallelism 可以是:
    --1 - 取消生成并行计划。
    -->1 - 将并行索引操作中使用的最大处理器数量限制为指定数量。
    --0(默认值)- 根据当前系统工作负荷使用实际数量的处理器或更少数量的处理器。
    --有关详细信息,请参阅 配置并行索引操作。
    maxdop=1

    --data_compression=row:为指定的表、分区号或分区范围指定数据压缩选项。 选项如下所示:
    --none
    --不压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --row
    --使用行压缩来压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --page
    --使用页压缩来压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --columnstore
    --适用范围: SQL Server 2014 (12.x) 到 SQL Server 2017。
    --仅适用于列存储表。 COLUMNSTORE 指定对使用 COLUMNSTORE_ARCHIVE 选项压缩的分区进行解压缩。 还原数据时,将继续通过用于所有列存储表的列存储压缩对 COLUMNSTORE 索引进行压缩。
    --columnstore_archive
    --适用范围: SQL Server 2014 (12.x) 到 SQL Server 2017。
    --仅适用于列存储表,这是使用聚集列存储索引存储的表。 COLUMNSTORE_ARCHIVE 会进一步将指定分区压缩到更小。 这可用于存档,或者用于要求更少存储并且可以付出更多时间来进行存储和检索的其他情形
    --data_compression=none

    --on partitions ( { <partition_number_expression> | <range> } [ ,...n ] ) 适用范围: SQL Server 2008 到 SQL Server 2017。
    --指定对其应用 DATA_COMPRESSION 设置的分区。 如果表未分区,ON PARTITIONS 参数将生成错误。 如果不提供 ON PARTITIONS 子句,DATA_COMPRESSION 选项将应用于已分区表的所有分区。
    --可以按以下方式指定 <partition_number_expression>:
    --提供一个分区号,例如:ON PARTITIONS (2)。
    --提供若干单独分区的分区号并用逗号将它们隔开,例如:ON PARTITIONS (1, 5)。
    --同时提供范围和单个分区,例如:ON PARTITIONS (2, 4, 6 TO 8)。
    --<range> 可以指定为以单词 TO 隔开的分区号,例如:ON PARTITIONS (6 TO 8)。
    --,请多次指定 DATA_COMPRESSION 选项 
    --on partitions(1-2)
    )
    on [primary];
    go

    --添加唯一聚集索引描述
    execute sp_addextendedproperty N'MS_Description',N'第一个唯一聚集索引',N'schema',N'dbo',N'table',N'test1',N'index',N'uniqueclus1';
    go

    创建唯一索引优缺点

    优点:

    1、多列唯一索引能够保证索引键中值的每个组合都是唯一的。 

    2、只要每个列中的数据是唯一的,就可以为同一个表创建一个唯一聚集索引。

    3、唯一索引能够确保定义的列的数据完整性。

    4、唯一索引提供帮助查询优化器生成更高效的执行计划的其他信息。

    5、创建唯一索引只会创建一个唯一索引,不会创建约束。

    缺点:

    1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

    2、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

    3、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

     

    展开全文
  • Sql Server 创建唯一聚集索引典型实现

    千次阅读 2020-03-10 14:41:55
    创建唯一聚集索引典型实现 唯一索引可通过以下方式实现: PRIMARY KEY 或 UNIQUE 约束 在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。...

    创建唯一聚集索引典型实现

    唯一索引可通过以下方式实现:

    • PRIMARY KEY 或 UNIQUE 约束

      在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。 主键列不允许空值。

      在创建 UNIQUE 约束时,默认情况下将创建唯一非聚集索引,以便强制 UNIQUE 约束。 如果不存在该表的聚集索引,则可以指定唯一聚集索引。

      有关详细信息,请参阅 Unique Constraints and Check Constraints 和 Primary and Foreign Key Constraints

    • 独立于约束的索引

      可以为一个表定义多个唯一非聚集索引。

      有关详细信息,请参阅 CREATE INDEX (Transact-SQL)

    • 索引视图

      若要创建索引视图,请对一个或多个视图列定义唯一聚集索引。 视图将执行,并且结果集存储在该索引的页级别中,其存储方式与表数据存储在聚集索引中的方式相同。 有关详细信息,请参阅 创建索引视图

    创建唯一聚集索引限制和局限

    • 如果数据中存在重复的键值,则不能创建唯一索引、UNIQUE 约束或 PRIMARY KEY 约束。

    • 唯一非聚集索引可以包括包含性非键列。 有关详细信息,请参阅 Create Indexes with Included Columns

    使用SSMS数据库管理工具创建唯一聚集索引

    使用表设计器创建唯一索引

    1、连接数据库,选择数据库,选择数据表-》右键点击数据表-》选择设计。

    2、在表设计器窗口-》选择要添加索引的数据列-》右键点击-》选择索引/键。

    3、在索引/键弹出款-》点击添加-》类型选择索引-》点击选择列。

    4、在索引列弹出框-》选择索引数据列-》选择索引排序方式-》可以添加多个索引列-》点击确定。

    5、在索引/键弹出框-》是唯一的选择是-》输入索引名称-》输入索引描述-》创建为聚集的选择为是-》其它可以选择默认或者自己设置-》点击关闭。

    6、点击保存(或者按下ctrl+s)-》关闭表设计器-》刷新表-》查看创建结果。

    使用对象资源管理器创建唯一索引

    1、连接数据库,选择数据库,选择数据表-》展开对象资源管理器-》右键点击索引-》点击新建索引-》选择聚集索引。

    2、在新建索引弹出框-》输入索引名称-》选择唯一创建为唯一聚集索引-》点击添加选择索引数据列。

    3、在表选择列弹出框中-》选择数据列,可以选择多个-》点击确定。

    4、在新建索引弹出框-》点击选项-》可以自行设置索引属性。

    5、在新建索引弹出框-》点击存储-》选择设置存储存储属性。

    6、在新建索引弹出框-》点击扩展属性-》添加扩展属性名称-》添加扩展属性值-》点击确定。

    7、查看创建结果。

    使用T-SQL脚本创建唯一聚集索引

    语法:

    --声明数据库引用
    use 数据库名;
    go

    --判断索引是否存在
    if exists(select * from sysindexes where name=索引名)
    drop index 索引名 on 表名 with (online=off);
    go

    --添加索引
    create 
    --[unique] --指定聚集索引是否唯一
    [clustered | nonclustered]  --指定为聚集索引
    index 索引名称 --索引名称
    on 表名  --索引添加在哪个表
    (列名 [asc | desc],列名 [asc | desc],...) --索引添加在哪个数据列

    with(

    --pad_index:指定索引填充
    --pad_index=on:FILLFACTOR 指定的可用空间百分比应用于索引的中间级页。
    --pad_index=off或未指定 fillfactor:考虑到中间级页上的键集,可以将中间级页几乎填满,但至少要为最大索引行留出足够空间。
    pad_index={ on | off },

    --statistics_norecompute:指定是否重新计算统计信息。
    --statistics_norecompute=on:过时的统计信息不会自动重新计算。
    --statistics_norecompute=off:启用自动统计信息更新。
    statistics_norecompute={ on | off },

    --sort_in_tempdb:指定是否将排序结果存储在 tempdb 中。
    --sort_in_tempdb=on:在tempdb中存储用于生成索引的中间排序结果。如果tempdb与用户数据库不在同一组磁盘上,就可缩短创建索引所需的时间。但是,这会增加索引生成期间所使用的磁盘空间量。
    --sort_in_tempdb=off:中间排序结果与索引存储在同一数据库中。
    sort_in_tempdb={ on | off },

    --ignore_dup_key:指定在插入操作尝试向唯一索引插入重复键值时的响应类型。 IGNORE_DUP_KEY 选项仅适用于创建或重新生成索引后发生的插入操作。 当执行 CREATE INDEX、ALTER INDEX 或 UPDATE 时,该选项无效。 默认为 OFF。
    --ignore_dup_key=on:打开,将重复键值插入唯一索引时会出现警告消息。只有违反唯一性的行为才会失败。
    --ignore_dup_key=off:关闭,将重复键值插入唯一索引时会出现错误消息。回滚整个INSERT操作。对于对视图创建的索引、非唯一索引、XML 索引、空间索引以及筛选的索引,IGNORE_DUP_KEY 不能设置为 ON
    ignore_dup_key={ on | off },

    --drop_existing:表示如果这个索引还在表上就 drop 掉然后在 create 一个新的。 默认为 OFF。
    --drop_existing=on:指定要删除并重新生成现有索引,其必须具有相同名称作为参数 index_name。
    --drop_existing=off:指定不删除和重新生成现有的索引。 如果指定的索引名称已经存在,SQL Server 将显示一个错误。
    drop_existing={ on | off },

    --online:指定在索引操作期间基础表和关联的索引是否可用于查询和数据修改操作。 默认为 OFF。 REBUILD 可作为 ONLINE 操作执行。
    --online=on:在索引操作期间不持有长期表锁。 在索引操作的主要阶段,源表上只使用意向共享 (IS) 锁。 
    --这使得能够继续对基础表和索引进行查询或更新。 
    --操作开始时,在很短的时间内对源对象持有共享 (S) 锁。
    --操作结束时,如果创建非聚集索引,将在短期内获取对源的 S(共享)锁;
    --当联机创建或删除聚集索引时,以及重新生成聚集或非聚集索引时,将在短期内获取 SCH-M(架构修改)锁。 但联机索引锁是短的元数据锁,特别是 Sch-M 锁必须等待此表上的所有阻塞事务完成。 
    --在等待期间,Sch-M 锁在访问同一表时阻止在此锁后等待的所有其他事务。 对本地临时表创建索引时,ONLINE 不能设置为 ON。
    --online=off:在索引操作期间应用表锁。这样可以防止所有用户在操作期间访问基础表。
    --创建、重新生成或删除聚集索引或者重新生成或删除非聚集索引的脱机索引操作将对表获取架构修改 (Sch-M) 锁。 
    --这样可以防止所有用户在操作期间访问基础表。 创建非聚集索引的脱机索引操作将对表获取共享 (S) 锁。 这样可以防止更新基础表,但允许读操作(如 SELECT 语句)。
    online={ on | off },

    --aloow_row_locks:指定是否允许行锁。
    --allow_row_locks=on:访问索引时允许行锁。数据库引擎确定何时使用行锁。
    --allow_row_locks=off:不使用行锁。
    allow_row_locks={ on | off }, 

    --allow_page_locks:指定是否允许使用页锁。
    --allow_page_locks=on:访问索引时允许页锁。数据库引擎确定何时使用页锁。
    -- allow_page_locks=off:不使用页锁。
    allow_page_locks={ on | off },

    --fillfactor=n:指定一个百分比,指示在数据库引擎创建或修改索引的过程中,应将每个索引页面的叶级填充到什么程度。 指定的值必须是 1 到 100 之间的整数。 默认值为 0。
    fillfactor=n

    --maxdop=max_degree_of_parallelism:在索引操作期间替代 max degree of parallelism 配置选项。 有关详细信息,请参阅 配置 max degree of parallelism 服务器配置选项。 使用 MAXDOP 可以限制在执行并行计划的过程中使用的处理器数量。 最大数量为 64 个处理器。
    --max_degree_of_parallelism 可以是:
    --1 - 取消生成并行计划。
    -->1 - 将并行索引操作中使用的最大处理器数量限制为指定数量。
    --0(默认值)- 根据当前系统工作负荷使用实际数量的处理器或更少数量的处理器。
    --有关详细信息,请参阅 配置并行索引操作。
    --maxdop=max_degree_of_parallelism,

    --data_compression=row:为指定的表、分区号或分区范围指定数据压缩选项。 选项如下所示:
    --none
    --不压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --row
    --使用行压缩来压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --page
    --使用页压缩来压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --columnstore
    --适用范围: SQL Server 2014 (12.x) 到 SQL Server 2017。
    --仅适用于列存储表。 COLUMNSTORE 指定对使用 COLUMNSTORE_ARCHIVE 选项压缩的分区进行解压缩。 还原数据时,将继续通过用于所有列存储表的列存储压缩对 COLUMNSTORE 索引进行压缩。
    --columnstore_archive
    --适用范围: SQL Server 2014 (12.x) 到 SQL Server 2017。
    --仅适用于列存储表,这是使用聚集列存储索引存储的表。 COLUMNSTORE_ARCHIVE 会进一步将指定分区压缩到更小。 这可用于存档,或者用于要求更少存储并且可以付出更多时间来进行存储和检索的其他情形
    --data_compression={ none | row | page | columnstore | columnstore_archive }

    --on partitions ( { <partition_number_expression> | <range> } [ ,...n ] ) 适用范围: SQL Server 2008 到 SQL Server 2017。
    --指定对其应用 DATA_COMPRESSION 设置的分区。 如果表未分区,ON PARTITIONS 参数将生成错误。 如果不提供 ON PARTITIONS 子句,DATA_COMPRESSION 选项将应用于已分区表的所有分区。
    --可以按以下方式指定 <partition_number_expression>:
    --提供一个分区号,例如:ON PARTITIONS (2)。
    --提供若干单独分区的分区号并用逗号将它们隔开,例如:ON PARTITIONS (1, 5)。
    --同时提供范围和单个分区,例如:ON PARTITIONS (2, 4, 6 TO 8)。
    --<range> 可以指定为以单词 TO 隔开的分区号,例如:ON PARTITIONS (6 TO 8)。
    --,请多次指定 DATA_COMPRESSION 选项 
    --on partitions(1-2)

    )
    on [primary];--数据空间规范
    go

    --添加注释
    execute sp_addextendedproperty N'MS_Description',N'索引说明',N'schema',N'dbo',N'table',N'表名',N'index',N'索引名称';
    go

    示例:

    --声明数据库应用
    use testss;
    go

    --判断是否存在索引
    if exists(select * from sysindexes where name='uniqueclus1')
    drop index uniqueclus1 on test1 with (online=off);
    go

    create 
    unique --唯一
    clustered --聚集索引 
    index --索引关键字
    uniqueclus1 --索引名称
    on test1 --索引建立在哪张表
    (name asc) --索引建立在哪个数据列
    with(

    --pad_index:指定索引填充
    --pad_index=on:FILLFACTOR 指定的可用空间百分比应用于索引的中间级页。
    --pad_index=off或未指定 fillfactor:考虑到中间级页上的键集,可以将中间级页几乎填满,但至少要为最大索引行留出足够空间。
    pad_index=on,

    --statistics_norecompute:指定是否重新计算统计信息。
    --statistics_norecompute=on:过时的统计信息不会自动重新计算。
    --statistics_norecompute=off:启用自动统计信息更新。
    statistics_norecompute=on,

    --sort_in_tempdb:指定是否将排序结果存储在 tempdb 中。
    --sort_in_tempdb=on:在tempdb中存储用于生成索引的中间排序结果。如果tempdb与用户数据库不在同一组磁盘上,就可缩短创建索引所需的时间。但是,这会增加索引生成期间所使用的磁盘空间量。
    --sort_in_tempdb=off:中间排序结果与索引存储在同一数据库中。
    sort_in_tempdb=off,

    --ignore_dup_key:指定在插入操作尝试向唯一索引插入重复键值时的响应类型。 IGNORE_DUP_KEY 选项仅适用于创建或重新生成索引后发生的插入操作。 当执行 CREATE INDEX、ALTER INDEX 或 UPDATE 时,该选项无效。 默认为 OFF。
    --ignore_dup_key=on:打开,将重复键值插入唯一索引时会出现警告消息。只有违反唯一性的行为才会失败。
    --ignore_dup_key=off:关闭,将重复键值插入唯一索引时会出现错误消息。回滚整个INSERT操作。对于对视图创建的索引、非唯一索引、XML 索引、空间索引以及筛选的索引,IGNORE_DUP_KEY 不能设置为 ON
    ignore_dup_key=off,

    --drop_existing:表示如果这个索引还在表上就 drop 掉然后在 create 一个新的。 默认为 OFF。
    --drop_existing=on:指定要删除并重新生成现有索引,其必须具有相同名称作为参数 index_name。
    --drop_existing=off:指定不删除和重新生成现有的索引。 如果指定的索引名称已经存在,SQL Server 将显示一个错误。
    drop_existing=off,

    --online:指定在索引操作期间基础表和关联的索引是否可用于查询和数据修改操作。 默认为 OFF。 REBUILD 可作为 ONLINE 操作执行。
    --online=on:在索引操作期间不持有长期表锁。 在索引操作的主要阶段,源表上只使用意向共享 (IS) 锁。 
    --这使得能够继续对基础表和索引进行查询或更新。 
    --操作开始时,在很短的时间内对源对象持有共享 (S) 锁。
    --操作结束时,如果创建非聚集索引,将在短期内获取对源的 S(共享)锁;
    --当联机创建或删除聚集索引时,以及重新生成聚集或非聚集索引时,将在短期内获取 SCH-M(架构修改)锁。 但联机索引锁是短的元数据锁,特别是 Sch-M 锁必须等待此表上的所有阻塞事务完成。 
    --在等待期间,Sch-M 锁在访问同一表时阻止在此锁后等待的所有其他事务。 对本地临时表创建索引时,ONLINE 不能设置为 ON。
    --online=off:在索引操作期间应用表锁。这样可以防止所有用户在操作期间访问基础表。
    --创建、重新生成或删除聚集索引或者重新生成或删除非聚集索引的脱机索引操作将对表获取架构修改 (Sch-M) 锁。 
    --这样可以防止所有用户在操作期间访问基础表。 创建非聚集索引的脱机索引操作将对表获取共享 (S) 锁。 这样可以防止更新基础表,但允许读操作(如 SELECT 语句)。
    online=off,

    --allow_row_locks:指定是否允许行锁。
    --allow_row_locks=on:访问索引时允许行锁。数据库引擎确定何时使用行锁。
    --allow_row_locks=off:不使用行锁。
    allow_row_locks=on,

    --allow_page_locks:指定是否允许使用页锁。
    --allow_page_locks=on:访问索引时允许页锁。数据库引擎确定何时使用页锁。
    --allow_page_locks=off:不使用页锁。
    allow_page_locks=on,

    --fillfactor=n:指定一个百分比,指示在数据库引擎创建或修改索引的过程中,应将每个索引页面的叶级填充到什么程度。 指定的值必须是 1 到 100 之间的整数。 默认值为 0。
    fillfactor=1,

    --maxdop=max_degree_of_parallelism:在索引操作期间替代 max degree of parallelism 配置选项。 有关详细信息,请参阅 配置 max degree of parallelism 服务器配置选项。 使用 MAXDOP 可以限制在执行并行计划的过程中使用的处理器数量。 最大数量为 64 个处理器。
    --max_degree_of_parallelism 可以是:
    --1 - 取消生成并行计划。
    -->1 - 将并行索引操作中使用的最大处理器数量限制为指定数量。
    --0(默认值)- 根据当前系统工作负荷使用实际数量的处理器或更少数量的处理器。
    --有关详细信息,请参阅 配置并行索引操作。
    maxdop=1

    --data_compression=row:为指定的表、分区号或分区范围指定数据压缩选项。 选项如下所示:
    --none
    --不压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --row
    --使用行压缩来压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --page
    --使用页压缩来压缩表或指定的分区。 仅适用于行存储表;不适用于列存储表。
    --columnstore
    --适用范围: SQL Server 2014 (12.x) 到 SQL Server 2017。
    --仅适用于列存储表。 COLUMNSTORE 指定对使用 COLUMNSTORE_ARCHIVE 选项压缩的分区进行解压缩。 还原数据时,将继续通过用于所有列存储表的列存储压缩对 COLUMNSTORE 索引进行压缩。
    --columnstore_archive
    --适用范围: SQL Server 2014 (12.x) 到 SQL Server 2017。
    --仅适用于列存储表,这是使用聚集列存储索引存储的表。 COLUMNSTORE_ARCHIVE 会进一步将指定分区压缩到更小。 这可用于存档,或者用于要求更少存储并且可以付出更多时间来进行存储和检索的其他情形
    --data_compression=none

    --on partitions ( { <partition_number_expression> | <range> } [ ,...n ] ) 适用范围: SQL Server 2008 到 SQL Server 2017。
    --指定对其应用 DATA_COMPRESSION 设置的分区。 如果表未分区,ON PARTITIONS 参数将生成错误。 如果不提供 ON PARTITIONS 子句,DATA_COMPRESSION 选项将应用于已分区表的所有分区。
    --可以按以下方式指定 <partition_number_expression>:
    --提供一个分区号,例如:ON PARTITIONS (2)。
    --提供若干单独分区的分区号并用逗号将它们隔开,例如:ON PARTITIONS (1, 5)。
    --同时提供范围和单个分区,例如:ON PARTITIONS (2, 4, 6 TO 8)。
    --<range> 可以指定为以单词 TO 隔开的分区号,例如:ON PARTITIONS (6 TO 8)。
    --,请多次指定 DATA_COMPRESSION 选项 
    --on partitions(1-2)
    )
    on [primary];
    go

    --添加唯一聚集索引描述
    execute sp_addextendedproperty N'MS_Description',N'第一个唯一聚集索引',N'schema',N'dbo',N'table',N'test1',N'index',N'uniqueclus1';
    go

     

    创建唯一索引优缺点

    优点:

    1、多列唯一索引能够保证索引键中值的每个组合都是唯一的。 

    2、只要每个列中的数据是唯一的,就可以为同一个表创建一个唯一聚集索引。

    3、唯一索引能够确保定义的列的数据完整性。

    4、唯一索引提供帮助查询优化器生成更高效的执行计划的其他信息。

    5、创建唯一索引只会创建一个唯一索引,不会创建约束。

    缺点:

    1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

    2、索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。

    3、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

    展开全文
  • 说明:红色字体表示要特别注意点 索引是在数据库表或者视图上创建的对象,目的是为了加快对表或视图的查询的速度。...1、聚集索引:表中存储的数据按照索引的顺序存储,检索效率比普通索引高,但对数...
  • 在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创建唯一聚集索引。 主键列不允许空值。 在创建 UNIQUE 约束时,默认情况下将创建唯一非聚集索引,以便强制 ...
  • 视图上创建了唯一聚集索引之后,你还可以创建另外的非聚集索引。基础表不会受到这些视图索引创建的影响,因为它们是独立的基础对象。 索引视图能在任何版本的SQL Server中创建,但是只有SQL Server企业版的查询...
  • 索引类型 根据数据库的功能,可在数据库设计器中创建三种类型的索引 — 唯一索引、主键索引和聚集索引。 提示 尽管唯一索引有助于找到信息,但为了获得最佳性能,建议使用主键约束或唯一约束。 唯一索引 唯一索引不...
  • 聚集索引和非聚集索引 SQL Server 2014 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。 这些键...
  • 索引、唯一索引、聚集索引

    千次阅读 2012-04-28 09:14:50
    索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的...
  • SQL Server索引视图以(物化视图)及索引视图与查询重写 &nbsp; 本文出处:http://www.cnblogs.com/wy123/p/6041122.html&nbsp; &nbsp;  经常听Oracle的同学说起来物化视图,物化视图的作用之一...
  • 索引视图

    2020-06-22 23:25:00
    建有唯一聚集索引视图称为索引视图,也称为物化视图 定义视图 select * from c select * from d 1 --定义视图 2 create view dbo.vc 3 with schemabinding 4 as 5 select c1 * c2 * (2 + ...
  • 视图上创建了唯一聚集索引后,该视图的结果集随即被具体化,并保存在数据库的物理存储中,从而在执行时节省了执行这一高成本操作的开销。 缺点:企业版支持此功能。会占用物理存储和增加基础表的维护开销。 ...
  • 聚集索引VS非聚集索引 SQL Server 2014 发布日期: 2016年12月 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。 索引包含由表或视图中的一列或多列生成的键。 这些键存储在一个...
  • 聚集索引与非聚集索引

    千次阅读 2013-07-09 12:12:24
    聚集索引也是堆结构?其实SQLSERVER有几种页面类型(数据都使用一页一页来存储,就像Windows的内存也是使用页面来组织的)感兴趣的朋友可以了解下,希望本文可以增加你们对非聚集索引结构的理解。 我们知道SQL...
  • 索引视图

    2015-04-26 14:28:56
    Ø 索引 1、 什么是索引 索引就是数据表中数据和相应的存储位置的列表,利用索引可以提高在表或视图中的查找数据的速度。...聚集索引和非聚集索引是数据库引擎中索引的基本类型,是理解其他类型索引的基础。
  • 随笔总结下,以备查用 前言: ...在表中唯一的,也是聚集索引。作用于快速查询。该列唯一。 ID NUMBER(38,0) PRIMARY KEY NOT NULL, 2:组合主键? 在表中以多个字段组成在表中是唯一的,...
  • 聚集索引 聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引。因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。如果某索引不是聚集索引,则表中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,884
精华内容 5,953
关键字:

视图唯一聚集索引