创建表以指定压缩选项

时间:2017-08-24 11:00:42

标签: sql-server

我正在使用这种难以理解的语法(对不起,我是Sql server的新手):)

CREATE TABLE   
    [ database_name . [ schema_name ] . | schema_name . ] table_name   
    [ AS FileTable ]  
    ( {   <column_definition>   
        | <computed_column_definition>    
        | <column_set_definition>   
        | [ <table_constraint> ]   
        | [ <table_index> ] }  
          [ ,...n ]    
          [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name   
             , system_end_time_column_name ) ]  
      )  
    [ ON { partition_scheme_name ( partition_column_name )   
           | filegroup   
           | "default" } ]   
    [ TEXTIMAGE_ON { filegroup | "default" } ]   
    [ FILESTREAM_ON { partition_scheme_name   
           | filegroup   
           | "default" } ]  
    [ WITH ( <table_option> [ ,...n ] ) ]  
[ ; ]  

我要问的表选项是

<table_option> ::=  
{  
    [DATA_COMPRESSION = { NONE | ROW | PAGE }  
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }   
      [ , ...n ] ) ]]  
.....

这是什么意思我可以格式化我的T-Sql脚本?

例如,

CREATE TABLE Black_Cowgirl_tb
([name] int not null, [location] varchar(50) not null, [SheCanCook] bit not null, [SheCanRideAHorse] bit not null,... ) WITH 
(
DATA_COMPRESSION = NONE ON PARTITIONS (1), 
DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8), 
DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
)

请您使用数据压缩选项获取所有可能的格式化方法吗?我想学到很多但我从来没有机会。谢谢。

2 个答案:

答案 0 :(得分:0)

<table_option> ::=  
{  
    [DATA_COMPRESSION = { NONE | ROW | PAGE }  
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }   
      [ , ...n ] ) ]]  

.....
  

请您使用数据压缩选项获取所有可能的格式化方法吗?

方括号中的

值是强制性的。以下是强制性的

data_Compression,ON PARTITIONS,..n
花括号中的

值表示您需要选择其中一个。

在这种情况下

{ NONE | ROW | PAGE }  

可以读作None或Row或Page ..

所以最后

data_Compression = 无或行或页面 上 分区(1)或分区(1-2)

答案 1 :(得分:0)

您的示例是错误的,因为您的表未被分区,因此如果您收到任何错误,则不是因为错误使用了compression选项,而是因为您创建的表根本没有分区。

在这里你可以找到很多例子: Creating Compressed Tables and Indexes

示例C就是您的情况:

CREATE TABLE PartitionTable1 
(col1 int, col2 varchar(max))
ON myRangePS1 (col1) 
WITH 
(
  DATA_COMPRESSION = ROW ON PARTITIONS (1),
  DATA_COMPRESSION = PAGE ON PARTITIONS (2 TO 4)
);
GO