SQL Server 2012新特性_列存储索引(2)

来源:互联网 发布:python waitress 编辑:程序博客网 时间:2024/04/27 22:01

在上一篇Blog(SQL Server 2012新特性_列存储索引(1) )中,对列存储及列存储索引的概念及特征等做了一些介绍,接下来,主要对列存储索引的创建与使用做一些演练:

  • 创建COLUMNSTORE INDEX
    创建COLUMNSTORE INDEX常用的语法如下:
    CREATE NONCLUSTERED COLUMNSTORE INDEX <ColumnStore_Index_Name> ON <Table_Name>(<Column1>,<Column2>,… <Column N>)
    通常可以通过T-SQL命令和SSMS的对象资源管理器两种方式创建COLUMNSTORE INDEX。假设我们有一张表tbl_ColumnStoreIndex,它有4列:Column1 (type int and primary key), Column2 (type varchar(50)), Column3 (type DateTime), Column4 (type NUMERIC(16,2)),我们将为这张表的最后3列创建column store index。
    T_SQL方式:

    在对象资源管理器里展开表tbl_ColumnStoreIndex的索引文件夹,可以看到刚刚T-SQL创建的索引:

    通过Object Explorer(对象资源管理器)创建:
    步骤1、建表和聚集索引,该步可以参考上面的T-SQL
    步骤2、展开表的树状结构,右击索引图标-->新建索引-->非聚集Columnstore索引

    单击“非聚集Columnstore索引”之后,将弹出如下界面:

    步骤3、输入索引名称,并单击“添加”按钮,选择要添加的列,再单击“确定”:


    步骤4、单击“确定”,索引即可被创建成功

  • 试图操作拥有Column Store Index的表
    当你往有Column Store Index的表中塞入数据时,你将会看到如下图所示的报错信息:

    如上面截图所示的报错信息所说,我们需要在Insert数据之前禁用该列存储索引,然后在完成INSERT后重新生成该列存储索引。因此,我们按照错误提示,重新尝试,如下图所示,成功塞入数据。当然,我们可以在创建Column Store Index之前,把数据塞好,不过,这种方式仅适合首次,以后在对表进行Insert、Update或Delete时,仍需要采取第一种方式,即先禁用列存储索引,再操作表,最后重建列存储索引。


    比如,Update该表时,也将会遇到类似前面Insert时类似的问题,按照消息的提示,Disable-->Update-->Rebuild操作即可。

从以上可以学习到,如何创建列存储索引,以及如何对具有列存储索引的表进行Insert、Update、Delete。从中我们也可以看出,一旦对表添加了列存储索引,表就变成了只读的了。如果我们需要进行Insert、Update、Delete等操作,我们需要先禁用列存储索引,然后进行表操作,最后再重建列存储索引。这个特性,使得列存储索引更适合存放静态数据的数据仓库。在接下来的Blog中,将介绍列存储索引的性能及其他相关的东西。

原创粉丝点击