适用于:SQL Server 2025(17.x) 预览版
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 预览版中的 SQL 数据库
本文包含有关向量和嵌入 SQL 数据库引擎中的常见问题。
如何保持嵌入代码更新?
每次它们所代表的基础数据发生变化时,更新嵌入。 这对于数据是动态的场景(例如用户生成的内容或频繁更新的数据库)尤其重要。 若要了解有关使嵌入保持最新状态的多个策略的详细信息,请参阅 数据库和 AI:用于保持嵌入更新的解决方案。
矢量搜索的开销存储和处理是什么?
矢量搜索的开销主要涉及矢量数据类型的存储以及索引和搜索所需的计算资源。
VECTOR数据类型设计为在存储方面高效,但确切的开销可能因存储的矢量的大小(维度数量)而异。
有关如何选择正确的矢量大小的详细信息,请查看 嵌入模型和维度:优化性能资源使用率比率。
SQL Server 数据页最多可以容纳 8,060 字节,因此矢量的大小会影响单个页中可存储的矢量数。 例如,如果你有一个具有 1,024 个维度的向量,并且每个维度都是一个精度 浮点数 (4 个字节),则矢量的总大小将为 4,104 字节(4096 字节有效负载 + 8 个字节标头)。 这会将可以容纳在单个页面中的向量数限制为 1。
我应使用哪些嵌入模型,以及何时使用?
有许多可用的嵌入模型,选择要使用的模型取决于特定的用例和正在处理的数据类型。 某些模型支持多种语言,而另一些模型则支持多模式数据(文本、图像等)。 有些仅联机可用,其他则可在本地运行。
除了模型本身,还要考虑模型的大小及其生成的维度数。 较大的模型可以提供更好的准确性,但需要更多的计算资源和存储空间,但在许多情况下,对于常见用例,具有更多维度并不能真正改变质量。
有关如何选择正确的嵌入模型的详细信息,请参阅 嵌入模型和维度:优化性能资源使用比率。
如何确定何时对向量使用单精度(4 字节)与半精度(2 字节)浮点值?
在数据库中存储嵌入向量时,单精度(float32)和半精度(float16)浮点数之间的选择通常归结于平衡存储效率与数字保真度。
幸运的是,嵌入通常对精度较小的更改不太敏感。
嵌入是语义搜索、建议系统和自然语言处理等任务中使用的密集矢量表示形式。 这些向量通常是神经网络的输出,它们本质上对微小的数值变化具有容忍度。 因此,将精度从 float32 减少到 float16 通常对相似性比较或下游任务的质量影响最小,尤其是在推理期间。
使用 float16 可以显著减少存储和内存使用量,这在处理大规模嵌入数据集时特别有用。
稀疏向量是什么呢?
目前,SQL 数据库引擎中的向量数据类型专为密集向量而设计,这些 向量 是浮点数数组,其中大多数元素都是非零的。 稀疏向量,即包含大量零元素的向量,不被原生支持。
SQL 矢量搜索的一些性能基准是什么?
性能可能因特定用例、数据集的大小和查询的复杂性而有所不同。 但是,SQL Server 的矢量搜索功能旨在高效且可缩放,利用索引技术优化搜索性能。
如果我想使用多个列来生成嵌入,该怎么办?
如果有多个要用于生成嵌入的列,则有两个主要选项:
- 为每个列创建一个嵌入,或
- 将多个列的值串联成单个字符串,然后为该串联字符串生成单个嵌入。
有关这两个选项和相关数据库设计注意事项的详细信息,请参阅 高效且优雅地对嵌入进行建模。
重新排名呢?
重新排名是一种技术,用于通过基于其他条件或模型重新评估初始结果来提高搜索结果的相关性。 在 SQL 数据库引擎中,可以通过将矢量搜索与全文(提供 BM25 排名)或其他 SQL 查询或机器学习模型相结合来实现重新排名,以便根据特定的业务逻辑或用户首选项优化结果。
有关详细信息,请查看 使用混合搜索和 RRF 重新排名增强搜索功能。
何时使用 AI 搜索(现在 AI Foundry)与将 SQL 用于矢量搜索方案?
AI 搜索(现在 AI Foundry)是专为高级搜索方案设计的专用服务,包括矢量搜索、自然语言处理和 AI 驱动的见解。 它提供了一组全面的功能,用于生成智能搜索应用程序,例如对各种 AI 模型的内置支持、高级排名算法以及与其他 AI 服务的集成。
SQL 数据库引擎提供存储任何类型的数据并运行任何类型的查询的功能:结构化和非结构化查询,并对该数据执行矢量搜索。 对于需要一起搜索所有这些数据的方案,这是一个不错的选择,你不想使用单独的服务进行搜索,这会使体系结构复杂化。 SQL 数据库引擎提供关键的企业安全功能,以确保数据始终受到保护,例如行级别安全性(RLS)、动态数据掩码(DDM)、Always Encrypted、不可变账本表和透明数据加密(TDE)。
下面是可在 Azure SQL 或 SQL Server 中运行的单个查询的示例,该查询可同时合并矢量、地理空间、结构化和非结构化数据。 示例查询根据餐厅的描述、餐厅的位置和用户的偏好检索前 50 个最相关的餐馆,使用矢量搜索对位置的描述和地理空间搜索,按星号、评论数、类别等进行筛选:
DECLARE @p GEOGRAPHY = GEOGRAPHY::Point(47.6694141, - 122.1238767, 4326);
DECLARE @e VECTOR (1536) = AI_GENERATE_EMBEDDINGS('I want to eat a good focaccia' USE model Text3Embedding);
SELECT TOP (50)
b.id AS business_id,
b.name AS business_name,
r.id AS review_id,
r.stars,
r.review,
VECTOR_DISTANCE('cosine', re.embedding, @e) AS semantic_distance,
@p.STDistance(geo_location) AS geo_distance
FROM dbo.reviews r
INNER JOIN dbo.reviews_embeddings re
ON r.id = re.review_id
INNER JOIN dbo.business b
ON r.business_id = b.id
WHERE b.city = 'Redmond'
AND @p.STDistance(b.geo_location) < 5000 -- 5 km
AND r.stars >= 4
AND b.reviews >= 30
AND JSON_VALUE(b.custom_attributes, '$.local_recommended') = 'true'
AND VECTOR_DISTANCE('cosine', re.embedding, @e) < 0.2
ORDER BY semantic_distance DESC;
在前面的示例中,精确近邻(ENN)搜索用于根据嵌入的语义距离查找最相关的评论,同时按地理空间距离和其他业务属性进行筛选。 此查询演示了将矢量搜索与传统 SQL 功能相结合的强大功能,以创建丰富的高效搜索体验。
如果要使用近似近邻(ANN)搜索,可以在表上 reviews_embeddings 创建矢量索引,并使用 VECTOR_SEARCH 函数执行搜索。
在哪里可以找到一个自定进度实验室,以了解有关嵌入和矢量搜索的详细信息?
查看自定进度 Azure SQL Cryptozoology AI 嵌入实验室。