---
title: 创建索引
description: "without data模式创建的索引表无数据填充。with data模式创建的索引表有数据填充。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/bds/kunpengbds_omniruntime_20_0198.html
sourcePath: /source/zh/kunpengboostkithistory/2300/bds/kunpengbds_omniruntime_20_0198.html
indexId: 93a29e74b678baf9af0c83198131aa40f5b2b94e6d41d605a72cdd30ff25da1078
---
# 创建索引

without data模式创建的索引表无数据填充。with data模式创建的索引表有数据填充。

#### without data模式创建

执行以下命令即可创建索引表，创建成功后索引表为空，无数据填充。

```
hbase com.huawei.boostkit.hindex.mapreduce.GlobalTableIndexer -Dtablename.to.index=tablename -Dindexspecs.to.add=
'idx_0=>cf_0:[q_0->STRING],[q_1];cf_1:[q_0->STRING],[q_1]#idx_1=>cf_0:[q_1->STRING],[q_2];cf_1:[q_1->STRING],[q_2]'
-Dindexspecs.covered.to.add=
'idx_0=>cf_0:[q_0];cf_1:[q_0]#idx_1=>cf_0:[q_0];cf_1:[q_0]'
```


**表1 命令参数说明**

| 参数 | 说明 |
| --- | --- |
| tablename.to.index | 表示创建索引的数据表的命名空间+表名。 |
| indexspecs.to.add | 表示索引名与对应数据表的列的映射，不会填充索引表数据。 |
| indexspecs.covered.to.add（可选） | 表示索引中冗余存储的数据表的列（覆盖列定义）。 |


**表2 命令参数值说明**

| 参数值 | 说明 |
| --- | --- |
| idx\_0、idx\_1 | 表示索引名称。 |
| cf\_0、cf\_1 | 表示列族名称。 |
| q\_0、q\_1、q\_2 | 表示列名称。 |
| STRING | 表示数据类型。支持STRING、INTEGER、FLOAT、LONG、DOUBLE、SHORT、BYTE和CHAR。 |
| '＃' | 表示分隔索引。 |
| ';' | 表示分隔列族。 |
| ',' | 表示分隔列限定符。 |


- 列名及其数据类型应包含在'[]'中。
- 列名及其数据类型通过'->'分隔。
- 如果未指定具体列的数据类型，则使用默认数据类型（STRING）。

- 索引列选择建议：由于基于索引查询时，查询条件必须包含第一列索引列。因此优先选择用作查询条件且选择率高的列作为索引列中的第一列。
- 创建索引时主备Master切换，会导致请求返回错误，不过创建流程可能会在备Master中执行成功，可以查询相关元数据信息校验。
- 针对随机性大的列创建索引的情况，查询性能效果提升更明显。


#### with data模式创建

执行以下命令即可创建索引表并填充数据，创建成功后得到有索引数据的完整索引表。

```
hbase com.huawei.boostkit.hindex.mapreduce.GlobalTableIndexer -Dtablename.to.index=tablename -Dindexspecs.to.addandbuild=
'idx_0=>cf_0:[q_0->STRING],[q_1];cf_1:[q_0->STRING],[q_1]#idx_1=>cf_0:[q_1->STRING],[q_2];cf_1:[q_1->STRING],[q_2]'
-Dindexspecs.covered.to.add=
'idx_0=>cf_0:[q_0];cf_1:[q_0]#idx_1=>cf_0:[q_0];cf_1:[q_0]'
```


**表3 命令参数说明**

| 参数 | 说明 |
| --- | --- |
| tablename.to.index | 表示创建索引的数据表的命名空间+表名。 |
| indexspecs.to.addandbuild | 表示索引名与对应数据表的列的映射，会填充索引表数据。 |
| indexspecs.covered.to.add（可选） | 表示索引中冗余存储的数据表的列（覆盖列定义）。 |


**表4 命令参数值说明**

| 参数值 | 说明 |
| --- | --- |
| idx\_0、idx\_1 | 表示索引名称。 |
| cf\_0、cf\_1 | 表示列族名称。 |
| q\_0、q\_1、q\_2 | 表示列名称。 |
| STRING | 表示数据类型。支持STRING、INTEGER、FLOAT、LONG、DOUBLE、SHORT、BYTE和CHAR。 |
| '＃' | 表示分隔索引。 |
| ';' | 表示分隔列族。 |
| ',' | 表示分隔列限定符。 |


- 列名及其数据类型应包含在'[]'中。
- 列名及其数据类型通过'->'分隔。
- 如果未指定具体列的数据类型，则使用默认数据类型（STRING）。

- 索引列选择建议：由于基于索引查询时，查询条件必须包含第一列索引列。因此优先选择用作查询条件且选择率高的列作为索引列中的第一列。
- 创建索引时主备Master切换，会导致请求返回错误，不过创建流程可能会在备Master中执行成功，可以查询相关元数据信息校验。
- 针对随机性大的列创建索引的情况，查询性能效果提升更明显。
