This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git
The following commit(s) were added to refs/heads/master by this push:
new 86eb8f1b958 index management in ANN (#3152)
86eb8f1b958 is described below
commit 86eb8f1b95816f69c538759dbc0689aabe31dd71
Author: ivin <[email protected]>
AuthorDate: Fri Dec 5 11:45:33 2025 +0800
index management in ANN (#3152)
## Versions
- [x] dev
- [x] 4.x
- [ ] 3.x
- [ ] 2.1
## Languages
- [x] Chinese
- [x] English
## Docs Checklist
- [ ] Checked by AI
- [ ] Test Cases Built
---
docs/ai/vector-search/index-management.md | 295 +++++++++++++++++++++
.../table-and-view/index/CREATE-INDEX.md | 14 +-
.../table-and-view/index/DROP-INDEX.md | 2 +-
.../table-and-view/index/SHOW-INDEX.md | 2 +-
.../current/ai/vector-search/index-management.md | 295 +++++++++++++++++++++
.../table-and-view/index/CREATE-INDEX.md | 12 +-
.../table-and-view/index/DROP-INDEX.md | 2 +-
.../table-and-view/index/SHOW-INDEX.md | 2 +-
.../ai/vector-search/index-management.md | 295 +++++++++++++++++++++
.../table-and-view/index/CREATE-INDEX.md | 14 +-
.../table-and-view/index/DROP-INDEX.md | 2 +-
.../table-and-view/index/SHOW-INDEX.md | 2 +-
sidebars.ts | 1 +
.../ai/vector-search/index-management.md | 295 +++++++++++++++++++++
.../table-and-view/index/CREATE-INDEX.md | 16 +-
.../table-and-view/index/DROP-INDEX.md | 2 +-
.../table-and-view/index/SHOW-INDEX.md | 2 +-
versioned_sidebars/version-4.x-sidebars.json | 3 +-
18 files changed, 1240 insertions(+), 16 deletions(-)
diff --git a/docs/ai/vector-search/index-management.md
b/docs/ai/vector-search/index-management.md
new file mode 100644
index 00000000000..8c6bc135d0f
--- /dev/null
+++ b/docs/ai/vector-search/index-management.md
@@ -0,0 +1,295 @@
+---
+{
+ "title": "ANN Index Management",
+ "language": "en"
+}
+---
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+
+# ANN Index Management
+
+## Overview
+
+Approximate Nearest Neighbor (ANN) indexes in Apache Doris enable efficient
vector similarity search for high-dimensional data. Since from Doris 4.x, the
universal index operation syntax has also been extended to cover ANN indexes.
This article will introduce the specific SQL syntax for ANN index-related
operations and provide detailed parameter explanations.
+
+ANN indexes are built on vector columns (typically `ARRAY<FLOAT> NOT NULL`
type) and support distance metrics include L2 distance and inner product.
+
+## Creating ANN Indexes
+
+ANN indexes can be created using the `CREATE INDEX` statement with `USING
ANN`. There are two main approaches:
+
+1. **Define the index during table creation**: The index is built
synchronously as data is loaded.
+
+### Syntax
+
+```sql
+CREATE TABLE [IF NOT EXISTS] <table_name> (
+ <columns_definition>
+ INDEX <index_name> (<vector_column) USING ANN PROPERTIES (
+ "<key>" = "<value>" [, ...]
+ )
+)
+[ <key_type> KEY (<key_cols>)
+ [ CLUSTER BY (<cluster_cols>) ]
+]
+[ COMMENT '<table_comment>' ]
+[ <partitions_definition> ]
+[ DISTRIBUTED BY { HASH (<distribute_cols>) | RANDOM }
+ [ BUCKETS { <bucket_count> | AUTO } ]
+]
+[ <roll_up_definition> ]
+[ PROPERTIES (
+ -- Table property
+ <table_property>
+ -- Additional table properties
+ [ , ... ])
+]
+```
+
+2. **Create the index separately**: Define the index first, then build it on
existing data using `BUILD INDEX`.
+
+### Syntax
+
+```sql
+CREATE INDEX [IF NOT EXISTS] <index_name>
+ ON <table_name> (<column_name>)
+ USING ANN
+ PROPERTIES ("<key>" = "<value>" [, ...])
+ [COMMENT '<index_comment>']
+
+-- or
+ALTER TABLE <table_name> ADD INDEX <index_name>(<column_name>)
+ USING ANN
+ [PROPERTIES("<key>" = "<value>" [, ...])]
+ [COMMENT '<index_comment>']
+```
+
+### General Properties
+
+- `index_type`: The type of ANN index. Supported values: `"ivf"` or `"hnsw"`.
+- `metric_type`: The distance metric. Supported values: `"l2_distance"`,
`"inner_product"`.
+- `dim`: The dimension of the vector column.
+- `quantizer`: The quantizer type. Supported values: `flat`, `sq4`, `sq8`,
`pq`. Default to `flat` when not specified.
+
+### Index-Specific Properties
+
+#### IVF Index Properties
+
+- `nlist`: Number of clusters (inverted lists). Default: 1024. Higher values
improve recall but increase build time and memory usage.
+
+#### HNSW Index Properties
+
+- `max_degree`: Maximum number of connections per node. Default: 32. Affects
recall and query performance.
+- `ef_construction`: Size of the candidate queue during index construction.
Default: 40. Higher values improve graph quality but increase build time.
+
+### Quantization-Specific Properties
+
+for quantizer property:
+
+- `sq4`: Scalar Quantization (SQ), uses 4-bit integers instead of the typical
32-bit floating point numbers to store each dimension value of a vector.
+- `sq8`: Scalar Quantization (SQ), uses 8-bit integers instead of the typical
32-bit floating point numbers to store each dimension value of a vector.
+- `pq`: Product Quantization (PQ), two additional parameters, `pq_m` and
`pq_nbits` are required in the properties.
+
+#### Product Quantization Properties
+
+- `pq_m`: Specifies how many subvectors are used (vector dimension dim must be
divisible by pq_m).
+- `pq_nbits`: The number of bits used to represent each subvector, in faiss
pq_nbits is generally required to be no greater than 24.
+
+### Examples
+
+#### Create table with ANN index
+
+```sql
+CREATE TABLE tbl_ann (
+ id int NOT NULL,
+ embedding array<float> NOT NULL,
+ INDEX ann_index (embedding) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128"
+ )
+) ENGINE=OLAP
+DUPLICATE KEY(id)
+DISTRIBUTED BY HASH(id) BUCKETS 1
+PROPERTIES ("replication_num" = "1");
+```
+
+#### IVF Index
+
+```sql
+CREATE INDEX ann_ivf_index ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024"
+);
+```
+
+#### HNSW Index
+
+```sql
+CREATE INDEX ann_hnsw_index ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40"
+);
+```
+
+#### HNSW Index with SQ
+
+```sql
+CREATE INDEX ann_hnsw_sq ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40",
+ "quantizer"="sq8"
+);
+```
+
+#### HNSW Index with PQ
+
+```sql
+CREATE INDEX ann_hnsw_pq ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40",
+ "quantizer"="pq",
+ "pq_m"="8",
+ "pq_nbits"="8"
+);
+```
+
+#### IVF Index with SQ
+
+```sql
+CREATE INDEX ann_ivf_sq ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024",
+ "quantizer"="sq8"
+);
+```
+
+#### IVF Index with PQ
+
+```sql
+CREATE INDEX ann_ivf_pq ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024",
+ "quantizer"="pq",
+ "pq_m"="8",
+ "pq_nbits"="8"
+);
+```
+
+## Building ANN Indexes
+
+For indexes created separately (not during table creation), use `BUILD INDEX`
to build the index on existing data. This operation is asynchronous.
+
+### Syntax
+
+```sql
+BUILD INDEX <index_name> ON <table_name> [PARTITION (<partition_name> [, ...])]
+```
+
+### Monitoring Build Progress
+
+Use `SHOW BUILD INDEX` to check the status of index build jobs.
+
+```sql
+-- view all the progress of BUILD INDEX tasks [for a specific database]
+SHOW BUILD INDEX [FROM db_name];
+
+-- view the progress of BUILD INDEX tasks for a specific table
+SHOW BUILD INDEX WHERE TableName = "<table_name>";
+```
+
+The output includes columns such as `JobId`, `TableName`, `State` (e.g.,
`FINISHED`, `RUNNING`), and `Progress`, for example:
+
+```sql
+mysql> show build index where TableName = "sift_1M";
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+| JobId | TableName | PartitionName | AlterInvertedIndexes
| CreateTime | FinishTime
| TransactionId | State | Msg | Progress |
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+| 1764579876673 | sift_1M | sift_1M | [ADD INDEX idx_test_ann
(`embedding`) USING ANN PROPERTIES("dim" = "128", "index_type" = "ivf",
"metric_type" = "l2_distance", "nlist" = "1024")], | 2025-12-01 17:59:54.277 |
2025-12-01 17:59:56.987 | 82 | FINISHED | | NULL |
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+1 row in set (0.00 sec)
+```
+
+### Canceling Index Builds
+
+To cancel an ongoing index build:
+
+```sql
+CANCEL BUILD INDEX ON <table_name> [(<job_id> [, ...])]
+```
+
+## Dropping ANN Indexes
+
+Remove an ANN index using `DROP INDEX`.
+
+### Syntax
+
+```sql
+DROP INDEX [IF EXISTS] <index_name> ON [<db_name>.]<table_name>
+
+-- or
+ALTER TABLE [<db_name>.]<table_name> DROP INDEX <index_name>
+```
+
+
+## Showing ANN Indexes
+
+Display information about indexes on a table using `SHOW INDEX` or `SHOW
CREATE TABLE`.
+
+### Syntax
+
+```sql
+SHOW INDEX[ES] FROM [<db_name>.]<table_name> [FROM <db_name>]
+
+-- or
+SHOW CREATE TABLE [<db_name>.]<table_name>
+```
+
+### Example Output
+
+```sql
+mysql> SHOW INDEX FROM sift_1M;
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation
| Cardinality | Sub_part | Packed | Null | Index_type | Comment | Properties
|
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+| sift_1M | | idx_test_ann | | embedding |
| | | | | ANN | | ("dim" =
"128", "index_type" = "ivf", "metric_type" = "l2_distance", "nlist" = "1024") |
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+1 row in set (0.01 sec)
+```
+
+The output includes columns such as `Table`, `Key_name`, `Index_type` (shows
`ANN` for ANN indexes), and `Properties` (containing the index configuration).
diff --git
a/docs/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
b/docs/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
index a3915b9b0e5..6123c1b5cc7 100644
--- a/docs/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
+++ b/docs/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
@@ -15,7 +15,7 @@ Create a new index on a table. The table name and index name
must be specified.
```sql
CREATE INDEX [IF NOT EXISTS] <index_name>
ON <table_name> (<column_name> [, ...])
- [USING {INVERTED | NGRAM_BF}]
+ [USING {INVERTED | NGRAM_BF | ANN}]
[PROPERTIES ("<key>" = "<value>"[ , ...])]
[COMMENT '<index_comment>']
```
@@ -95,4 +95,14 @@ The user executing this SQL command must have at least the
following permissions
```sql
CREATE INDEX index2 ON table1 USING NGRAM_BF PROPERTIES("gram_size"="3",
"bf_size"="1024");
- ```
\ No newline at end of file
+ ```
+
+- Create an ANN index `index3` on `table1` (`embedding`) vector column.
+
+ ```sql
+ CREATE INDEX index3 ON table1 (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128"
+ );
+ ```
diff --git a/docs/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
b/docs/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
index ae328b4239f..104e775f068 100644
--- a/docs/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
+++ b/docs/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
@@ -7,7 +7,7 @@
## Description
-This statement is used to delete an index with a specified name from a table.
Currently, only bitmap indexes are supported.
+This statement is used to delete an index with a specified name from a table.
Currently, only bitmap indexes, inverted indexes and ann indexes are supported.
## Syntax
diff --git a/docs/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
b/docs/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
index 10208885d01..434d1f5f1c9 100644
--- a/docs/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
+++ b/docs/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
@@ -7,7 +7,7 @@
## Description
-This statement is used to display information about indexes in a table.
Currently, only bitmap indexes are supported.
+This statement is used to display information about indexes in a table.
Currently, only bitmap indexes, inverted indexes and ann indexes are supported.
## Syntax
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/ai/vector-search/index-management.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/ai/vector-search/index-management.md
new file mode 100644
index 00000000000..6a1cffd4fcc
--- /dev/null
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/ai/vector-search/index-management.md
@@ -0,0 +1,295 @@
+---
+{
+ "title": "ANN 索引管理",
+ "language": "zh-CN"
+}
+---
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+
+# ANN 索引管理
+
+## 概述
+
+Apache Doris 中的近似最近邻 (ANN) 索引支持对高维数据进行高效的向量相似性搜索。从 Doris 4.x 开始,通用索引操作语法也支持了
ANN 索引。本文将介绍 ANN 索引相关操作的具体 SQL 语法,并提供详细的参数说明。
+
+ANN 索引建立在向量列上(`ARRAY<FLOAT> NOT NULL` 类型),支持两种度量类型包括 l2 distance(也叫欧式距离)和inner
product(内积)。
+
+## 创建 ANN 索引
+
+可以使用带有 `USING ANN` 的 `CREATE INDEX` 语句创建 ANN 索引。有两种主要方法:
+
+1. **在表创建期间定义索引**:索引在数据加载时同步构建。
+
+### 语法
+
+```sql
+CREATE TABLE [IF NOT EXISTS] <table_name> (
+ <columns_definition>
+ INDEX <index_name> (<vector_column) USING ANN PROPERTIES (
+ "<key>" = "<value>" [, ...]
+ )
+)
+[ <key_type> KEY (<key_cols>)
+ [ CLUSTER BY (<cluster_cols>) ]
+]
+[ COMMENT '<table_comment>' ]
+[ <partitions_definition> ]
+[ DISTRIBUTED BY { HASH (<distribute_cols>) | RANDOM }
+ [ BUCKETS { <bucket_count> | AUTO } ]
+]
+[ <roll_up_definition> ]
+[ PROPERTIES (
+ -- Table property
+ <table_property>
+ -- Additional table properties
+ [ , ... ])
+]
+```
+
+2. **单独创建索引**:先定义索引,然后使用 `BUILD INDEX` 在现有数据上构建。
+
+### 语法
+
+```sql
+CREATE INDEX [IF NOT EXISTS] <index_name>
+ ON <table_name> (<column_name>)
+ USING ANN
+ PROPERTIES ("<key>" = "<value>" [, ...])
+ [COMMENT '<index_comment>']
+
+-- or
+ALTER TABLE <table_name> ADD INDEX <index_name>(<column_name>)
+ USING ANN
+ [PROPERTIES("<key>" = "<value>" [, ...])]
+ [COMMENT '<index_comment>']
+```
+
+### 通用属性
+
+- `index_type`: ANN 索引的类型。支持的值:"ivf" 或 "hnsw"。
+- `metric_type`: 度量类型。支持的值:"l2_distance"、"inner_product"。
+- `dim`: 向量列的维度。
+- `quantizer`: 量化器类型。支持的值:flat、sq4、sq8、pq。不指定时默认为 flat。
+
+### 索引特定属性
+
+#### IVF 索引属性
+
+- `nlist`: 聚类数量(倒排列表)。默认:1024。更高的值改善召回率但增加构建时间和内存使用。
+
+#### HNSW 索引属性
+
+- `max_degree`: 每个节点的连接最大数量。默认:32。影响召回率和查询性能。
+- `ef_construction`: 索引构建期间候选队列的大小。默认:40。更高的值改善图质量但增加构建时间。
+
+### 量化特定属性
+
+对于量化器属性:
+
+- `sq4`: 标量量化 (SQ),使用 4 位整数替代 32 位浮点数来存储向量的每个维度值。
+- `sq8`: 标量量化 (SQ),使用 8 位整数替代 32 位浮点数来存储向量的每个维度值。
+- `pq`: 乘积量化 (PQ),properties中需要额外指定两个参数,`pq_m` 和 `pq_nbits`
+
+#### 乘积量化属性
+
+- `pq_m`: 指定使用的子向量数量(向量维度 dim 必须能被 pq_m 整除)。
+- `pq_nbits`: 用于表示每个子向量的比特数,在 faiss 中 pq_nbits 通常要求不超过 24。
+
+### 示例
+
+#### 创建带有 ANN 索引的表
+
+```sql
+CREATE TABLE tbl_ann (
+ id int NOT NULL,
+ embedding array<float> NOT NULL,
+ INDEX ann_index (embedding) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128"
+ )
+) ENGINE=OLAP
+DUPLICATE KEY(id)
+DISTRIBUTED BY HASH(id) BUCKETS 1
+PROPERTIES ("replication_num" = "1");
+```
+
+#### IVF 索引
+
+```sql
+CREATE INDEX ann_ivf_index ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024"
+);
+```
+
+#### HNSW 索引
+
+```sql
+CREATE INDEX ann_hnsw_index ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40"
+);
+```
+
+#### HNSW + SQ
+
+```sql
+CREATE INDEX ann_hnsw_sq ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40",
+ "quantizer"="sq8"
+);
+```
+
+#### HNSW + PQ
+
+```sql
+CREATE INDEX ann_hnsw_pq ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40",
+ "quantizer"="pq",
+ "pq_m"="8",
+ "pq_nbits"="8"
+);
+```
+
+#### IVF + SQ
+
+```sql
+CREATE INDEX ann_ivf_sq ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024",
+ "quantizer"="sq8"
+);
+```
+
+#### IVF + PQ
+
+```sql
+CREATE INDEX ann_ivf_pq ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024",
+ "quantizer"="pq",
+ "pq_m"="8",
+ "pq_nbits"="8"
+);
+```
+
+## 构建 ANN 索引
+
+对于单独创建的索引,使用 `BUILD INDEX` 在现有数据上构建索引。这个操作是异步的。
+
+### 语法
+
+```sql
+BUILD INDEX <index_name> ON <table_name> [PARTITION (<partition_name> [, ...])]
+```
+
+### 监控构建进度
+
+使用 `SHOW BUILD INDEX` 检查索引构建的进度和状态。
+
+```sql
+-- 查看所有 BUILD INDEX 任务的进度 [对于特定数据库]
+SHOW BUILD INDEX [FROM db_name];
+
+-- 查看特定表的 BUILD INDEX 任务进度
+SHOW BUILD INDEX WHERE TableName = "<table_name>";
+```
+
+输出包括 `JobId`、`TableName`、`State`(例如 `FINISHED`、`RUNNING`)和 `Progress` 等列,例如:
+
+```sql
+mysql> show build index where TableName = "sift_1M";
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+| JobId | TableName | PartitionName | AlterInvertedIndexes
| CreateTime | FinishTime
| TransactionId | State | Msg | Progress |
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+| 1764579876673 | sift_1M | sift_1M | [ADD INDEX idx_test_ann
(`embedding`) USING ANN PROPERTIES("dim" = "128", "index_type" = "ivf",
"metric_type" = "l2_distance", "nlist" = "1024")], | 2025-12-01 17:59:54.277 |
2025-12-01 17:59:56.987 | 82 | FINISHED | | NULL |
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+1 row in set (0.00 sec)
+```
+
+### 取消索引构建
+
+要取消正在进行的索引构建:
+
+```sql
+CANCEL BUILD INDEX ON <table_name> [(<job_id> [, ...])]
+```
+
+## 删除 ANN 索引
+
+使用 `DROP INDEX` 删除 ANN 索引。
+
+### 语法
+
+```sql
+DROP INDEX [IF EXISTS] <index_name> ON [<db_name>.]<table_name>
+
+-- or
+ALTER TABLE [<db_name>.]<table_name> DROP INDEX <index_name>
+```
+
+
+## 查看 ANN 索引
+
+使用 `SHOW INDEX` 或 `SHOW CREATE TABLE` 查看索引信息。
+
+### 语法
+
+```sql
+SHOW INDEX[ES] FROM [<db_name>.]<table_name> [FROM <db_name>]
+
+-- or
+SHOW CREATE TABLE [<db_name>.]<table_name>
+```
+
+### 示例输出
+
+```sql
+mysql> SHOW INDEX FROM sift_1M;
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation
| Cardinality | Sub_part | Packed | Null | Index_type | Comment | Properties
|
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+| sift_1M | | idx_test_ann | | embedding |
| | | | | ANN | | ("dim" =
"128", "index_type" = "ivf", "metric_type" = "l2_distance", "nlist" = "1024") |
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+1 row in set (0.01 sec)
+```
+
+输出包括 `Table`、`Key_name`、`Index_type`(ANN 索引显示 `ANN`)和 `Properties`(包含索引配置)等列。
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
index 0aed54c7865..e3b22d8ce42 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
@@ -90,4 +90,14 @@ CREATE INDEX [IF NOT EXISTS] <index_name>
```sql
CREATE INDEX index2 ON table1 USING NGRAM_BF PROPERTIES("gram_size"="3",
"bf_size"="1024");
- ```
\ No newline at end of file
+ ```
+
+- 在 table1 上创建 ANN 索引 index3
+
+ ```sql
+ CREATE INDEX index3 ON table1 (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128"
+ );
+ ```
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
index 61bf19a5b66..8ceedea1642 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
@@ -7,7 +7,7 @@
## 描述
-该语句用于从一个表中删除指定名称的索引,目前仅支持 bitmap, inverted index 索引。
+该语句用于从一个表中删除指定名称的索引,目前仅支持 bitmap, inverted index, ann index 索引。
## 语法
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
index 53576728bda..93f1bbf17a3 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
@@ -7,7 +7,7 @@
## 描述
- 该语句用于展示一个表中索引的相关信息,目前只支持 bitmap 索引
+ 该语句用于展示一个表中索引的相关信息,目前只支持 bitmap index, inverted index, ann index 索引
## 语法
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/ai/vector-search/index-management.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/ai/vector-search/index-management.md
new file mode 100644
index 00000000000..6a1cffd4fcc
--- /dev/null
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/ai/vector-search/index-management.md
@@ -0,0 +1,295 @@
+---
+{
+ "title": "ANN 索引管理",
+ "language": "zh-CN"
+}
+---
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+
+# ANN 索引管理
+
+## 概述
+
+Apache Doris 中的近似最近邻 (ANN) 索引支持对高维数据进行高效的向量相似性搜索。从 Doris 4.x 开始,通用索引操作语法也支持了
ANN 索引。本文将介绍 ANN 索引相关操作的具体 SQL 语法,并提供详细的参数说明。
+
+ANN 索引建立在向量列上(`ARRAY<FLOAT> NOT NULL` 类型),支持两种度量类型包括 l2 distance(也叫欧式距离)和inner
product(内积)。
+
+## 创建 ANN 索引
+
+可以使用带有 `USING ANN` 的 `CREATE INDEX` 语句创建 ANN 索引。有两种主要方法:
+
+1. **在表创建期间定义索引**:索引在数据加载时同步构建。
+
+### 语法
+
+```sql
+CREATE TABLE [IF NOT EXISTS] <table_name> (
+ <columns_definition>
+ INDEX <index_name> (<vector_column) USING ANN PROPERTIES (
+ "<key>" = "<value>" [, ...]
+ )
+)
+[ <key_type> KEY (<key_cols>)
+ [ CLUSTER BY (<cluster_cols>) ]
+]
+[ COMMENT '<table_comment>' ]
+[ <partitions_definition> ]
+[ DISTRIBUTED BY { HASH (<distribute_cols>) | RANDOM }
+ [ BUCKETS { <bucket_count> | AUTO } ]
+]
+[ <roll_up_definition> ]
+[ PROPERTIES (
+ -- Table property
+ <table_property>
+ -- Additional table properties
+ [ , ... ])
+]
+```
+
+2. **单独创建索引**:先定义索引,然后使用 `BUILD INDEX` 在现有数据上构建。
+
+### 语法
+
+```sql
+CREATE INDEX [IF NOT EXISTS] <index_name>
+ ON <table_name> (<column_name>)
+ USING ANN
+ PROPERTIES ("<key>" = "<value>" [, ...])
+ [COMMENT '<index_comment>']
+
+-- or
+ALTER TABLE <table_name> ADD INDEX <index_name>(<column_name>)
+ USING ANN
+ [PROPERTIES("<key>" = "<value>" [, ...])]
+ [COMMENT '<index_comment>']
+```
+
+### 通用属性
+
+- `index_type`: ANN 索引的类型。支持的值:"ivf" 或 "hnsw"。
+- `metric_type`: 度量类型。支持的值:"l2_distance"、"inner_product"。
+- `dim`: 向量列的维度。
+- `quantizer`: 量化器类型。支持的值:flat、sq4、sq8、pq。不指定时默认为 flat。
+
+### 索引特定属性
+
+#### IVF 索引属性
+
+- `nlist`: 聚类数量(倒排列表)。默认:1024。更高的值改善召回率但增加构建时间和内存使用。
+
+#### HNSW 索引属性
+
+- `max_degree`: 每个节点的连接最大数量。默认:32。影响召回率和查询性能。
+- `ef_construction`: 索引构建期间候选队列的大小。默认:40。更高的值改善图质量但增加构建时间。
+
+### 量化特定属性
+
+对于量化器属性:
+
+- `sq4`: 标量量化 (SQ),使用 4 位整数替代 32 位浮点数来存储向量的每个维度值。
+- `sq8`: 标量量化 (SQ),使用 8 位整数替代 32 位浮点数来存储向量的每个维度值。
+- `pq`: 乘积量化 (PQ),properties中需要额外指定两个参数,`pq_m` 和 `pq_nbits`
+
+#### 乘积量化属性
+
+- `pq_m`: 指定使用的子向量数量(向量维度 dim 必须能被 pq_m 整除)。
+- `pq_nbits`: 用于表示每个子向量的比特数,在 faiss 中 pq_nbits 通常要求不超过 24。
+
+### 示例
+
+#### 创建带有 ANN 索引的表
+
+```sql
+CREATE TABLE tbl_ann (
+ id int NOT NULL,
+ embedding array<float> NOT NULL,
+ INDEX ann_index (embedding) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128"
+ )
+) ENGINE=OLAP
+DUPLICATE KEY(id)
+DISTRIBUTED BY HASH(id) BUCKETS 1
+PROPERTIES ("replication_num" = "1");
+```
+
+#### IVF 索引
+
+```sql
+CREATE INDEX ann_ivf_index ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024"
+);
+```
+
+#### HNSW 索引
+
+```sql
+CREATE INDEX ann_hnsw_index ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40"
+);
+```
+
+#### HNSW + SQ
+
+```sql
+CREATE INDEX ann_hnsw_sq ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40",
+ "quantizer"="sq8"
+);
+```
+
+#### HNSW + PQ
+
+```sql
+CREATE INDEX ann_hnsw_pq ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40",
+ "quantizer"="pq",
+ "pq_m"="8",
+ "pq_nbits"="8"
+);
+```
+
+#### IVF + SQ
+
+```sql
+CREATE INDEX ann_ivf_sq ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024",
+ "quantizer"="sq8"
+);
+```
+
+#### IVF + PQ
+
+```sql
+CREATE INDEX ann_ivf_pq ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024",
+ "quantizer"="pq",
+ "pq_m"="8",
+ "pq_nbits"="8"
+);
+```
+
+## 构建 ANN 索引
+
+对于单独创建的索引,使用 `BUILD INDEX` 在现有数据上构建索引。这个操作是异步的。
+
+### 语法
+
+```sql
+BUILD INDEX <index_name> ON <table_name> [PARTITION (<partition_name> [, ...])]
+```
+
+### 监控构建进度
+
+使用 `SHOW BUILD INDEX` 检查索引构建的进度和状态。
+
+```sql
+-- 查看所有 BUILD INDEX 任务的进度 [对于特定数据库]
+SHOW BUILD INDEX [FROM db_name];
+
+-- 查看特定表的 BUILD INDEX 任务进度
+SHOW BUILD INDEX WHERE TableName = "<table_name>";
+```
+
+输出包括 `JobId`、`TableName`、`State`(例如 `FINISHED`、`RUNNING`)和 `Progress` 等列,例如:
+
+```sql
+mysql> show build index where TableName = "sift_1M";
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+| JobId | TableName | PartitionName | AlterInvertedIndexes
| CreateTime | FinishTime
| TransactionId | State | Msg | Progress |
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+| 1764579876673 | sift_1M | sift_1M | [ADD INDEX idx_test_ann
(`embedding`) USING ANN PROPERTIES("dim" = "128", "index_type" = "ivf",
"metric_type" = "l2_distance", "nlist" = "1024")], | 2025-12-01 17:59:54.277 |
2025-12-01 17:59:56.987 | 82 | FINISHED | | NULL |
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+1 row in set (0.00 sec)
+```
+
+### 取消索引构建
+
+要取消正在进行的索引构建:
+
+```sql
+CANCEL BUILD INDEX ON <table_name> [(<job_id> [, ...])]
+```
+
+## 删除 ANN 索引
+
+使用 `DROP INDEX` 删除 ANN 索引。
+
+### 语法
+
+```sql
+DROP INDEX [IF EXISTS] <index_name> ON [<db_name>.]<table_name>
+
+-- or
+ALTER TABLE [<db_name>.]<table_name> DROP INDEX <index_name>
+```
+
+
+## 查看 ANN 索引
+
+使用 `SHOW INDEX` 或 `SHOW CREATE TABLE` 查看索引信息。
+
+### 语法
+
+```sql
+SHOW INDEX[ES] FROM [<db_name>.]<table_name> [FROM <db_name>]
+
+-- or
+SHOW CREATE TABLE [<db_name>.]<table_name>
+```
+
+### 示例输出
+
+```sql
+mysql> SHOW INDEX FROM sift_1M;
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation
| Cardinality | Sub_part | Packed | Null | Index_type | Comment | Properties
|
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+| sift_1M | | idx_test_ann | | embedding |
| | | | | ANN | | ("dim" =
"128", "index_type" = "ivf", "metric_type" = "l2_distance", "nlist" = "1024") |
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+1 row in set (0.01 sec)
+```
+
+输出包括 `Table`、`Key_name`、`Index_type`(ANN 索引显示 `ANN`)和 `Properties`(包含索引配置)等列。
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
index 0aed54c7865..975feacc06b 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
@@ -14,7 +14,7 @@
```sql
CREATE INDEX [IF NOT EXISTS] <index_name>
ON <table_name> (<column_name> [, ...])
- [USING {INVERTED | NGRAM_BF}]
+ [USING {INVERTED | NGRAM_BF | ANN}]
[PROPERTIES ("<key>" = "<value>"[ , ...])]
[COMMENT '<index_comment>']
```
@@ -90,4 +90,14 @@ CREATE INDEX [IF NOT EXISTS] <index_name>
```sql
CREATE INDEX index2 ON table1 USING NGRAM_BF PROPERTIES("gram_size"="3",
"bf_size"="1024");
- ```
\ No newline at end of file
+ ```
+
+- 在table1 上创建 ANN 索引 index3
+
+ ```sql
+ CREATE INDEX index3 ON table1 (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128"
+ );
+ ```
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
index 61bf19a5b66..8ceedea1642 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
@@ -7,7 +7,7 @@
## 描述
-该语句用于从一个表中删除指定名称的索引,目前仅支持 bitmap, inverted index 索引。
+该语句用于从一个表中删除指定名称的索引,目前仅支持 bitmap, inverted index, ann index 索引。
## 语法
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
index 53576728bda..93f1bbf17a3 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
@@ -7,7 +7,7 @@
## 描述
- 该语句用于展示一个表中索引的相关信息,目前只支持 bitmap 索引
+ 该语句用于展示一个表中索引的相关信息,目前只支持 bitmap index, inverted index, ann index 索引
## 语法
diff --git a/sidebars.ts b/sidebars.ts
index 6e45f2ca010..36174c82091 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -411,6 +411,7 @@ const sidebars: SidebarsConfig = {
'ai/vector-search/overview',
'ai/vector-search/hnsw',
'ai/vector-search/ivf',
+ 'ai/vector-search/index-management',
],
},
],
diff --git a/versioned_docs/version-4.x/ai/vector-search/index-management.md
b/versioned_docs/version-4.x/ai/vector-search/index-management.md
new file mode 100644
index 00000000000..8c6bc135d0f
--- /dev/null
+++ b/versioned_docs/version-4.x/ai/vector-search/index-management.md
@@ -0,0 +1,295 @@
+---
+{
+ "title": "ANN Index Management",
+ "language": "en"
+}
+---
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+
+
+# ANN Index Management
+
+## Overview
+
+Approximate Nearest Neighbor (ANN) indexes in Apache Doris enable efficient
vector similarity search for high-dimensional data. Since from Doris 4.x, the
universal index operation syntax has also been extended to cover ANN indexes.
This article will introduce the specific SQL syntax for ANN index-related
operations and provide detailed parameter explanations.
+
+ANN indexes are built on vector columns (typically `ARRAY<FLOAT> NOT NULL`
type) and support distance metrics include L2 distance and inner product.
+
+## Creating ANN Indexes
+
+ANN indexes can be created using the `CREATE INDEX` statement with `USING
ANN`. There are two main approaches:
+
+1. **Define the index during table creation**: The index is built
synchronously as data is loaded.
+
+### Syntax
+
+```sql
+CREATE TABLE [IF NOT EXISTS] <table_name> (
+ <columns_definition>
+ INDEX <index_name> (<vector_column) USING ANN PROPERTIES (
+ "<key>" = "<value>" [, ...]
+ )
+)
+[ <key_type> KEY (<key_cols>)
+ [ CLUSTER BY (<cluster_cols>) ]
+]
+[ COMMENT '<table_comment>' ]
+[ <partitions_definition> ]
+[ DISTRIBUTED BY { HASH (<distribute_cols>) | RANDOM }
+ [ BUCKETS { <bucket_count> | AUTO } ]
+]
+[ <roll_up_definition> ]
+[ PROPERTIES (
+ -- Table property
+ <table_property>
+ -- Additional table properties
+ [ , ... ])
+]
+```
+
+2. **Create the index separately**: Define the index first, then build it on
existing data using `BUILD INDEX`.
+
+### Syntax
+
+```sql
+CREATE INDEX [IF NOT EXISTS] <index_name>
+ ON <table_name> (<column_name>)
+ USING ANN
+ PROPERTIES ("<key>" = "<value>" [, ...])
+ [COMMENT '<index_comment>']
+
+-- or
+ALTER TABLE <table_name> ADD INDEX <index_name>(<column_name>)
+ USING ANN
+ [PROPERTIES("<key>" = "<value>" [, ...])]
+ [COMMENT '<index_comment>']
+```
+
+### General Properties
+
+- `index_type`: The type of ANN index. Supported values: `"ivf"` or `"hnsw"`.
+- `metric_type`: The distance metric. Supported values: `"l2_distance"`,
`"inner_product"`.
+- `dim`: The dimension of the vector column.
+- `quantizer`: The quantizer type. Supported values: `flat`, `sq4`, `sq8`,
`pq`. Default to `flat` when not specified.
+
+### Index-Specific Properties
+
+#### IVF Index Properties
+
+- `nlist`: Number of clusters (inverted lists). Default: 1024. Higher values
improve recall but increase build time and memory usage.
+
+#### HNSW Index Properties
+
+- `max_degree`: Maximum number of connections per node. Default: 32. Affects
recall and query performance.
+- `ef_construction`: Size of the candidate queue during index construction.
Default: 40. Higher values improve graph quality but increase build time.
+
+### Quantization-Specific Properties
+
+for quantizer property:
+
+- `sq4`: Scalar Quantization (SQ), uses 4-bit integers instead of the typical
32-bit floating point numbers to store each dimension value of a vector.
+- `sq8`: Scalar Quantization (SQ), uses 8-bit integers instead of the typical
32-bit floating point numbers to store each dimension value of a vector.
+- `pq`: Product Quantization (PQ), two additional parameters, `pq_m` and
`pq_nbits` are required in the properties.
+
+#### Product Quantization Properties
+
+- `pq_m`: Specifies how many subvectors are used (vector dimension dim must be
divisible by pq_m).
+- `pq_nbits`: The number of bits used to represent each subvector, in faiss
pq_nbits is generally required to be no greater than 24.
+
+### Examples
+
+#### Create table with ANN index
+
+```sql
+CREATE TABLE tbl_ann (
+ id int NOT NULL,
+ embedding array<float> NOT NULL,
+ INDEX ann_index (embedding) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128"
+ )
+) ENGINE=OLAP
+DUPLICATE KEY(id)
+DISTRIBUTED BY HASH(id) BUCKETS 1
+PROPERTIES ("replication_num" = "1");
+```
+
+#### IVF Index
+
+```sql
+CREATE INDEX ann_ivf_index ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024"
+);
+```
+
+#### HNSW Index
+
+```sql
+CREATE INDEX ann_hnsw_index ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40"
+);
+```
+
+#### HNSW Index with SQ
+
+```sql
+CREATE INDEX ann_hnsw_sq ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40",
+ "quantizer"="sq8"
+);
+```
+
+#### HNSW Index with PQ
+
+```sql
+CREATE INDEX ann_hnsw_pq ON tbl_hnsw (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "max_degree"="32",
+ "ef_construction"="40",
+ "quantizer"="pq",
+ "pq_m"="8",
+ "pq_nbits"="8"
+);
+```
+
+#### IVF Index with SQ
+
+```sql
+CREATE INDEX ann_ivf_sq ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024",
+ "quantizer"="sq8"
+);
+```
+
+#### IVF Index with PQ
+
+```sql
+CREATE INDEX ann_ivf_pq ON tbl_ivf (`embedding`) USING ANN PROPERTIES(
+ "index_type"="ivf",
+ "metric_type"="l2_distance",
+ "dim"="128",
+ "nlist"="1024",
+ "quantizer"="pq",
+ "pq_m"="8",
+ "pq_nbits"="8"
+);
+```
+
+## Building ANN Indexes
+
+For indexes created separately (not during table creation), use `BUILD INDEX`
to build the index on existing data. This operation is asynchronous.
+
+### Syntax
+
+```sql
+BUILD INDEX <index_name> ON <table_name> [PARTITION (<partition_name> [, ...])]
+```
+
+### Monitoring Build Progress
+
+Use `SHOW BUILD INDEX` to check the status of index build jobs.
+
+```sql
+-- view all the progress of BUILD INDEX tasks [for a specific database]
+SHOW BUILD INDEX [FROM db_name];
+
+-- view the progress of BUILD INDEX tasks for a specific table
+SHOW BUILD INDEX WHERE TableName = "<table_name>";
+```
+
+The output includes columns such as `JobId`, `TableName`, `State` (e.g.,
`FINISHED`, `RUNNING`), and `Progress`, for example:
+
+```sql
+mysql> show build index where TableName = "sift_1M";
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+| JobId | TableName | PartitionName | AlterInvertedIndexes
| CreateTime | FinishTime
| TransactionId | State | Msg | Progress |
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+| 1764579876673 | sift_1M | sift_1M | [ADD INDEX idx_test_ann
(`embedding`) USING ANN PROPERTIES("dim" = "128", "index_type" = "ivf",
"metric_type" = "l2_distance", "nlist" = "1024")], | 2025-12-01 17:59:54.277 |
2025-12-01 17:59:56.987 | 82 | FINISHED | | NULL |
++---------------+-----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------+-------------------------+---------------+----------+------+----------+
+1 row in set (0.00 sec)
+```
+
+### Canceling Index Builds
+
+To cancel an ongoing index build:
+
+```sql
+CANCEL BUILD INDEX ON <table_name> [(<job_id> [, ...])]
+```
+
+## Dropping ANN Indexes
+
+Remove an ANN index using `DROP INDEX`.
+
+### Syntax
+
+```sql
+DROP INDEX [IF EXISTS] <index_name> ON [<db_name>.]<table_name>
+
+-- or
+ALTER TABLE [<db_name>.]<table_name> DROP INDEX <index_name>
+```
+
+
+## Showing ANN Indexes
+
+Display information about indexes on a table using `SHOW INDEX` or `SHOW
CREATE TABLE`.
+
+### Syntax
+
+```sql
+SHOW INDEX[ES] FROM [<db_name>.]<table_name> [FROM <db_name>]
+
+-- or
+SHOW CREATE TABLE [<db_name>.]<table_name>
+```
+
+### Example Output
+
+```sql
+mysql> SHOW INDEX FROM sift_1M;
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation
| Cardinality | Sub_part | Packed | Null | Index_type | Comment | Properties
|
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+| sift_1M | | idx_test_ann | | embedding |
| | | | | ANN | | ("dim" =
"128", "index_type" = "ivf", "metric_type" = "l2_distance", "nlist" = "1024") |
++---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+----------------------------------------------------------------------------------------+
+1 row in set (0.01 sec)
+```
+
+The output includes columns such as `Table`, `Key_name`, `Index_type` (shows
`ANN` for ANN indexes), and `Properties` (containing the index configuration).
diff --git
a/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
b/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
index a3915b9b0e5..6df7dcc2f86 100644
---
a/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
+++
b/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/CREATE-INDEX.md
@@ -15,7 +15,7 @@ Create a new index on a table. The table name and index name
must be specified.
```sql
CREATE INDEX [IF NOT EXISTS] <index_name>
ON <table_name> (<column_name> [, ...])
- [USING {INVERTED | NGRAM_BF}]
+ [USING {INVERTED | NGRAM_BF | ANN}]
[PROPERTIES ("<key>" = "<value>"[ , ...])]
[COMMENT '<index_comment>']
```
@@ -95,4 +95,16 @@ The user executing this SQL command must have at least the
following permissions
```sql
CREATE INDEX index2 ON table1 USING NGRAM_BF PROPERTIES("gram_size"="3",
"bf_size"="1024");
- ```
\ No newline at end of file
+ ```
+
+
+- Create an ANN index `index3` on `table1` (`embedding`) vector column.
+
+
+ ```sql
+ CREATE INDEX index3 ON table1 (`embedding`) USING ANN PROPERTIES(
+ "index_type"="hnsw",
+ "metric_type"="l2_distance",
+ "dim"="128"
+ );
+ ```
diff --git
a/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
b/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
index ae328b4239f..104e775f068 100644
---
a/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
+++
b/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/DROP-INDEX.md
@@ -7,7 +7,7 @@
## Description
-This statement is used to delete an index with a specified name from a table.
Currently, only bitmap indexes are supported.
+This statement is used to delete an index with a specified name from a table.
Currently, only bitmap indexes, inverted indexes and ann indexes are supported.
## Syntax
diff --git
a/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
b/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
index 10208885d01..434d1f5f1c9 100644
---
a/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
+++
b/versioned_docs/version-4.x/sql-manual/sql-statements/table-and-view/index/SHOW-INDEX.md
@@ -7,7 +7,7 @@
## Description
-This statement is used to display information about indexes in a table.
Currently, only bitmap indexes are supported.
+This statement is used to display information about indexes in a table.
Currently, only bitmap indexes, inverted indexes and ann indexes are supported.
## Syntax
diff --git a/versioned_sidebars/version-4.x-sidebars.json
b/versioned_sidebars/version-4.x-sidebars.json
index a56c8790b59..a4027e47cb8 100644
--- a/versioned_sidebars/version-4.x-sidebars.json
+++ b/versioned_sidebars/version-4.x-sidebars.json
@@ -417,7 +417,8 @@
"items": [
"ai/vector-search/overview",
"ai/vector-search/hnsw",
- "ai/vector-search/ivf"
+ "ai/vector-search/ivf",
+ "ai/vector-search/index-management"
]
}
]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]