
# 向量索引
实现了部分向量索引访问方法，比如创建、维护、检索等。创建索引格式请参见《参考》中"SQL参考 \> SQL语法 \> C \> CREATE INDEX"章节。向量索引不支持UNIQUE。
- 重建索引请参见《参考》中"SQL参考 \> SQL语法 \> R \> REINDEX"章节。
- 删除索引请参见《参考》中"SQL参考 \> SQL语法 \> D \> DROP INDEX"章节。
- **GLOBAL**
  分区表GLOBAL索引不支持。
  
- **DESC**
  不支持。
  
- **UNIQUE**
  不支持。
  
- **COLLATE collation**
  不支持。
  
- **DEDUPLICATION**
  不支持复合索引。
  
- **USING method**
  指定创建索引的方法。
  新增以下索引类型：
  gsivfflat：gsivfflat索引，针对向量数据的倒排索引。
  gsdiskann：gsdiskann索引，针对向量数据的图索引。
  
- **WITH ( {storage_parameter = value} \[, ... \] )**
  指定索引方法的存储参数。
  取值范围：如[表1]、[表2]所示。
  
#### GsIVFFLAT
 表1向量索引类型GsIVFFLAT 
| 向量索引类型    | 函数名                  | 描述                                     |
|:---|:---|:---|
| GsIVFFLAT | ivfflatbeginscan     | 读取索引根节点信息到内存，对于ivfflat读取元信息和各个聚簇中心点信息。 |
| GsIVFFLAT | ivfflatbuild         | 创建基于数据聚类的倒排索引。                         |
| GsIVFFLAT | ivfflatbuildempty    | 反馈空索引。                                 |
| GsIVFFLAT | ivfflatbulkdelete    | 将所有索引中的死元组进行删除，并且更新每个聚簇的插入位置为第一个有空闲的页。 |
| GsIVFFLAT | ivfflatcostestimate  | 针对IVFFLAT扫描过程进行代价评估。                   |
| GsIVFFLAT | ivfflatendscan       | 清空索引扫描结构体上的变量并释放。                      |
| GsIVFFLAT | ivfflatgettuple      | 此函数提供执行器获得一条索引数据，在其中实现IVFFLAT核心检索步骤。   |
| GsIVFFLAT | ivfflatinsert        | 将新的元组插入到现有索引中，维护IVF索引。                 |
| GsIVFFLAT | ivfflatoptions       | 为索引解析并验证reloptions数组。                  |
| GsIVFFLAT | ivfflatrescan        | 重置索引扫描结构体上的变量。                         |
| GsIVFFLAT | ivfflatvacuumcleanup | 更新IVFFLAT索引统计信息。                       |
   
#### GsDiskANN
 表2向量索引类型GsDiskANN 
| 向量索引类型                                                                               | 函数名                       | 描述                                                                                             |
|:---|:---|:---|
| GsDiskANN     | diskannbuild              | 创建基于Vamana图的向量索引。                                                                              |
| GsDiskANN     | diskannbuildempty         | 反馈空索引。                                                                                         |
| GsDiskANN     | diskannoptions            | 为索引解析并验证reloptions数组。                                                                          |
| GsDiskANN     | diskanninsert             | 将新的元组插入到现有索引中，维护diskann索引。                                                                     |
| GsDiskANN     | diskannbeginscan          | 读取索引根节点信息到内存，加载PQ表中心点信息，指定的距离函数，关键结构创建。                                                        |
| GsDiskANN     | diskanngettuple           | 此函数提供执行器获得一条索引数据，在其中实现GSDISKANN核心检索步骤。                                                         |
| GsDiskANN     | diskannrescan             | 重置索引扫描结构体上的变量。                                                                                 |
| GsDiskANN     | diskannendscan            | 清空索引扫描结构体上的变量并释放。                                                                              |
| GsDiskANN     | diskannbulkdelete         | 将所有索引中的死元组进行重置并且放入FSM中。                                                                        |
| GsDiskANN     | diskannvacuumcleanup      | 更新GSDISKANN索引统计信息。                                                                             |
| GsDiskANN     | diskanncostestimate       | 针对GSDISKANN扫描过程进行代价评估。                                                                         |
| GsDiskANN     | diskannarrayconsistent    | 判断数组类型的查询条件是否与索引中的数据一致，用于决定是否需要重新检查，仅支持TRUE或者FALSE判断。                                          |
| GsDiskANN     | diskannarrayextract       | 将数组类型的查询条件提取为多个元素，并设置"nkeys"和"null_flags"参数，用于后续的索引扫描。                                         |
| GsDiskANN     | diskannqueryarrayextract  | 处理数组类型的查询条件，并根据数值比较策略设置搜索模式。                                                                   |
| GsDiskANN     | diskannarraytriconsistent | 判断数组类型查询条件与索引数据是否一致的函数。在diskannarrayconsistent基础上加入了对不确定的情况做"可能匹配"的判断，除TRUE或者FALSE，还支持MAYBE判断。 |
   
![](https://support.huaweicloud.com/centralized-vector-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 创建索引时的内存需求超过限制会报错，内存需求的计算是统计当前数据量的大小，并根据统计数据量估算需要的内存大小，此提示值为统计值，大小可能会波动，建议根据实际情况在提示值基础上适当增大，将GUC参数maintenance_work_mem设置为合适大小。
- GsIVFFLAT索引支持的向量类型为floatvector和boolvector，而GsDiskANN索引仅支持向量类型为floatvector。
 
