SQL Server 2025 (17.x) 预览版
在向量列上创建近似索引,以提高最接近邻居搜索的性能。 若要详细了解矢量索引和矢量搜索的工作原理,以及精确搜索和近似搜索之间的差异,请参阅 SQL 数据库引擎中的矢量。
预览功能
注释
此功能以预览版提供,可能会更改。 请务必阅读 联机服务的服务级别协议(SLA)中的预览使用条款。
此功能处于预览状态。 若要使用此功能,必须启用以下 跟踪标志:
DBCC TRACEON(466, 474, 13981, -1)
在使用之前,请确保先查看 当前限制 。
语法
CREATE VECTOR INDEX index_name
ON object ( vector_column )
[ WITH (
[,] METRIC = { 'cosine' | 'dot' | 'euclidean' }
[ [,] TYPE = 'DiskANN' ]
[ [,] MAXDOP = max_degree_of_parallelism ]
[ [,] DROP_EXISTING = { ON | OFF } ]
) ]
[ ON { filegroup_name | "default" } ]
[;]
论据
index_name
索引的名称。 索引名称在表中必须唯一,但不必在数据库中是唯一的。 索引名称必须遵循 标识符规则。
对象
在其中创建索引的表。 它必须是基表。 不支持视图、临时表(本地表和全局表)。
vector_column
用于创建向量索引的列。 它必须是 矢量 类型。
METRIC = { 'cosine' |'dot' |'euclidean' }
一个字符串,其中包含用于计算两个给定向量之间的距离的距离指标的名称。 支持以下距离指标:
-
cosine
- 余弦距离 -
euclidean
- Euclidean 距离 -
dot
- (负数) 点积
TYPE = 'DiskANN'
用于生成索引的 ANN 算法 的类型。 目前仅支持 DiskANN
。 DiskANN 是默认值。
MAXDOP = max_degree_of_parallelism
替代索引作的 最大并行度 配置选项。 有关详细信息,请参阅 最大并行度。 使用 MAXDOP
来限制索引生成作的并行度和生成的资源消耗。
max_degree_of_parallelism 可以是:
1
取消生成并行计划。
>1
根据当前系统工作负荷,将并行索引作中使用的最大并行度限制为指定数目或更少。
0
(默认值)使用在服务器、数据库或工作负荷组级别指定的并行度,除非根据当前系统工作负荷减少。
有关详细信息,请参阅 “配置并行索引作”。
注释
Microsoft SQL Server 的每个版本中都不提供并行索引作。 有关 SQL Server 各版本支持的功能列表,请参阅 SQL Server 2022 或版本支持的版本和支持的功能以及 SQL Server2025 预览版支持的功能。
DROP_EXISTING = { ON |OFF }
使用修改后的规范删除和重新生成现有向量索引的选项,并为索引保留相同的名称。 默认值为 OFF
。
ON
指定删除并重新生成现有索引,该索引必须与 index_name 参数具有相同名称。
OFF
指定不删除和重新生成现有索引。 如果指定的索引名称已存在,SQL Server 将显示错误。
局限性
当前预览版具有以下限制:
- 不支持分区。 无法对矢量索引进行分区。
- 该表必须具有单个整数不可为 null 的列聚集索引。
- 在矢量索引创建完成所需的所有时间期间和所有时间,都会在表中获取 SCH-M 锁。 因此,锁会阻止对表或其元数据的任何访问。
- 在表上创建矢量索引后,该表将变为只读。 当表上存在向量索引时,不允许进行任何数据修改。
- 矢量索引不会复制到订阅服务器。
权限
用户必须对表具有 ALTER
权限。
例子
可在此处找到示例中使用的数据库的详细信息: 使用 Vector Embedding 下载并导入维基百科文章。
示例假定存在一个表,该表具有wikipedia_articles
存储标题的维基百科文章嵌入的类型title_vector
列vector
。
title_vector
假定是使用嵌入模型(如 text-embedding-ada-002 或 text-embedding-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 = 'cosine', 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
DBCC TRACEON(466, 474, 13981, -1);
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;