适用于: SQL Server 2025 (17.x) 预览版
在向量列上创建近似索引,以提高最接近邻居搜索的性能。 若要详细了解矢量索引和矢量搜索的工作原理,以及精确搜索和近似搜索之间的差异,请参阅 SQL 数据库引擎中的矢量搜索和矢量索引。
预览功能
此函数处于预览状态,可能会更改。 若要使用此功能,必须启用 PREVIEW_FEATURES数据库范围的配置。
在使用之前,请确保先查看 当前限制 。
语法
CREATE VECTOR INDEX index_name
ON object ( vector_column )
[ WITH (
[ , ] METRIC = { 'cosine' | 'dot' | 'euclidean' }
[ [ , ] TYPE = 'DiskANN' ]
[ [ , ] MAXDOP = max_degree_of_parallelism ]
) ]
[ ON { filegroup_name | "default" } ]
[;]
论据
index_name
索引的名称。 索引名称在表中必须唯一,但不必在数据库中是唯一的。 索引名称必须遵循 标识符规则。
对象
在其中创建索引的表。 它必须是基表。 不支持视图、临时表(本地表和全局表)。
vector_column
用于创建向量索引的列。 它必须是 矢量 类型。
度量
一个字符串,其中包含用于计算两个给定向量之间的距离的距离指标的名称。 支持以下距离指标:
-
cosine- 余弦距离 -
euclidean- Euclidean 距离 -
dot- (负数) 点积
TYPE
用于生成索引的 ANN 算法 的类型。 目前仅支持 DiskANN。 DiskANN 是默认值。
MAXDOP
替代索引作的 最大并行度 配置选项。 有关详细信息,请参阅 服务器配置:最大并行度。 使用 MAXDOP 来限制索引生成作的并行度和生成的资源消耗。
max_degree_of_parallelism 可以是:
1取消生成并行计划。
>1
根据当前系统工作负荷,将并行索引作中使用的最大并行度限制为指定数目或更少。
0(默认值)使用在服务器、数据库或工作负荷组级别指定的并行度,除非根据当前系统工作负荷减少。
有关详细信息,请参阅 配置并行索引作。
注释
并行索引操作并不适用于 SQL Server 的所有版本。 有关 SQL Server 各版本支持的功能列表,请参阅 SQL Server 2022 或版本支持的版本和支持的功能以及 SQL Server2025 预览版支持的功能。
局限性
当前预览版具有以下限制:
- 无法对矢量索引进行分区。 不支持分区。
- 该表必须具有单个列、整数、主键聚集索引。
- 具有向量索引的表变为只读。 当表上存在向量索引时,不允许进行任何数据修改。
- 矢量索引不会复制到订阅服务器。
已知问题
目前,在某些数据集上创建矢量索引时,可能会返回以下错误:
- 错误 9829:
STRING_AGG aggregation result exceeded the limit of 8000 bytes. Use LOB types to avoid result truncation. - 42234:
Internal SQL error during DiskANN graph build
有关详细信息,请查看 已知问题。
权限
用户必须对表具有 ALTER 权限。
例子
可在此处找到示例中使用的数据库的详细信息: 使用 Vector Embedding 下载并导入维基百科文章。
示例假定存在一个表,该表具有wikipedia_articles存储标题的维基百科文章嵌入的类型title_vector列vector。
title_vector 假设是使用嵌入模型(如 text-embedding-ada-002 或 文本嵌入-3-small)生成的嵌入,该模型返回具有 1,536 个维度的矢量。
有关更多示例(包括端到端解决方案),请转到 Azure SQL 数据库矢量搜索示例 GitHub 存储库。
示例 1
以下示例使用title_vector指标对cosine列创建向量索引。
CREATE VECTOR INDEX vec_idx
ON [dbo].[wikipedia_articles] ([title_vector])
WITH (METRIC = 'COSINE', TYPE = 'DISKANN');
示例 2
以下示例使用 (负) title_vector 产品指标对dot列创建向量索引,将并行度限制为 8,并将向量SECONDARY存储在文件组中。
CREATE VECTOR INDEX vec_idx
ON [dbo].[wikipedia_articles] ([title_vector])
WITH (METRIC = 'DOT', TYPE = 'DISKANN', MAXDOP = 8)
ON [SECONDARY];
示例 3
使用和相关CREATE VECTOR INDEX函数的基本端到端示例VECTOR_SEARCH。 将模拟嵌入内容。 在实际方案中,嵌入使用嵌入模型和 AI_GENERATE_EMBEDDINGS或 OpenAI SDK 等外部库生成。
以下代码块使用以下步骤创建模拟嵌入:
- 启用当前预览版中必需的跟踪标志。
- 使用数据类型
dbo.Articles的列embedding创建示例表。 - 使用模拟嵌入数据插入示例数据。
- 在 . 上
dbo.Articles.embedding创建向量索引。 - 使用函数演示矢量相似性搜索
VECTOR_SEARCH()。
-- Step 0: Enable Preview Feature
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
-- Step 1: Create a sample table with a VECTOR(5) column
CREATE TABLE dbo.Articles
(
id INT PRIMARY KEY,
title NVARCHAR(100),
content NVARCHAR(MAX),
embedding VECTOR(5) -- mocked embeddings
);
-- Step 2: Insert sample data
INSERT INTO Articles (id, title, content, embedding)
VALUES
(1, 'Intro to AI', 'This article introduces AI concepts.', '[0.1, 0.2, 0.3, 0.4, 0.5]'),
(2, 'Deep Learning', 'Deep learning is a subset of ML.', '[0.2, 0.1, 0.4, 0.3, 0.6]'),
(3, 'Neural Networks', 'Neural networks are powerful models.', '[0.3, 0.3, 0.2, 0.5, 0.1]'),
(4, 'Machine Learning Basics', 'ML basics for beginners.', '[0.4, 0.5, 0.1, 0.2, 0.3]'),
(5, 'Advanced AI', 'Exploring advanced AI techniques.', '[0.5, 0.4, 0.6, 0.1, 0.2]');
-- Step 3: Create a vector index on the embedding column
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (metric = 'cosine', type = 'diskann');
-- Step 4: Perform a vector similarity search
DECLARE @qv VECTOR(5) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT
t.id,
t.title,
t.content,
s.distance
FROM
VECTOR_SEARCH(
table = Articles AS t,
column = embedding,
similar_to = @qv,
metric = 'cosine',
top_n = 3
) AS s
ORDER BY s.distance, t.title;