您可以使用列存索引的扩展属性来定制列存索引。本文介绍了列存索引的扩展属性以及使用扩展属性来定制列存索引的方法。
扩展属性
pack_shift
用于设置列存索引数据的行组(row group)大小。列存索引数据的行组大小主要影响内存常驻部分数据的大小,在表较多或者使用分区表较多的场景下您可以适当进行调整。取值为整数。取值范围为6~18。未指定行组大小时,默认使用loose_imci_default_pack_shift
参数的值。
关于loose_imci_default_pack_shift
参数的详细说明请参见列存索引配置参数说明。您可以在控制台上查看和设置loose_imci_default_pack_shift
参数的值,具体操作请参见设置集群参数和节点参数。
codec_opt
用于设置列存索引的压缩算法。具体操作请参见设置列存数据压缩算法。
order_key
用于设置列存索引的排序键。具体操作请参见设置列索引的排序键。
pruner/pruner_minmax/pruner_bloom
用于设置是否在字符串列上构建辅助索引来加速数据扫描。具体操作请参见设置列索引查询过滤算法。
集群版本为PolarDB MySQL版8.0.1.1.35及以上时,默认会在字符串列构建minmax前缀索引和bloom filter索引。
prefix_len
用于设置字符串类型minmax pruner的前缀长度。单位为字符,取值范围为1~255。默认值为20。具体操作请参见创建表时构建pruner(minmax indexes)。
write_policy
用于设置列存索引数据的写入策略,主要影响数据占用的空间大小和写入性能。取值范围如下:
0:ForCapacity。表示优先考虑存储空间,尽可能地将数据切分后跨越多个文件写入,以最大化减少内部碎片,即每次写入最多产生1个4 KB的内部碎片。
1:ForPerformance。表示优先考虑性能,每次写入一个ExtentSize的文件。IO性能最好,内部碎片率最大化,空间浪费较多。
2:Skip4K。表示考虑到PFS的特点,16 KB大小的性能基本满足要求,数据切分逻辑类似ForCapacity。大于4 KB的数据在写入时完全不考虑4 KB Extent,每次写入最多产生1个16 KB的内部碎片。
3:Tradeoff,与kSkip4K相比较更进一步,当写入的数据量小于1 MB(IMCI IO单位大小)时等价于ForPerformance,写入的数据量大于或等于1 MB时,尽可能地将数据分割到不同的文件中。
未指定write_policy时,默认使用全局参数loose_imci_default_write_policy
的值。loose_imci_default_write_policy
参数的取值范围同write_policy。您可以在控制台上查看和设置loose_imci_default_write_policy
参数的值,具体操作方法请参见设置集群参数和节点参数。
使用方法
建表时指定扩展属性。
CREATE TABLE lineitem (l_orderkey INTEGER NOT NULL, l_partkey INTEGER NOT NULL, l_suppkey INTEGER NOT NULL, l_linenumber INTEGER NOT NULL, l_quantity DECIMAL(15,2) NOT NULL, l_extendedprice DECIMAL(15,2) NOT NULL, l_discount DECIMAL(15,2) NOT NULL, l_tax DECIMAL(15,2) NOT NULL, l_returnflag CHAR(1) NOT NULL, l_linestatus CHAR(1) NOT NULL, l_shipdate DATE NOT NULL, l_commitdate DATE NOT NULL, l_receiptdate DATE NOT NULL, l_shipinstruct CHAR(25) NOT NULL, l_shipmode CHAR(10) NOT NULL, l_comment VARCHAR(44) NOT NULL ) COMMENT "COLUMNAR=1 <optName>=<optValue>";
通过DDL指定扩展属性。
CREATE TABLE lineitem COMMENT "COLUMNAR=1 <optName>=<optValue>";
语法中对应的参数说明如下:
参数 | 说明 |
optName | 扩展属性名称。如pack_shift。 |
optValue | 扩展属性的值。 |