共用方式為


建立向量索引(Transact-SQL)(預覽)

適用於: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

在向量數據行上建立近似索引,以改善近鄰搜尋的效能。 若要深入瞭解向量索引和向量搜尋的運作方式,以及精確搜尋和近似搜尋之間的差異,請參閱 SQL 資料庫引擎中的向量搜尋和向量索引

Fabric 中的 Azure SQL 資料庫和 SQL 資料庫

此功能目前仍在預覽階段。 在使用之前,請務必先查看 目前的限制

備註

作為預覽功能,本文所述的技術受限於 Microsoft Azure 預覽版增補使用規定

SQL Server 2025 預覽功能

在 SQL Server 2025 中,此函式仍處於預覽階段,可能會有所變動。 若要使用此功能,您必須啟用 PREVIEW_FEATURES資料庫範圍的組態

在使用之前,請務必先查看 目前的限制

語法

Transact-SQL 語法慣例

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 - (負數) 點產品

類型

用來建置索引的 ANN 演算法 類型。 目前僅支援 DiskANN。 DiskANN 是預設值。

MAXDOP

覆寫索引作業 組態選項 平行處理原則的最大程度。 如需詳細資訊,請參閱 伺服器組態:平行處理原則的最大程度。 使用 MAXDOP 來限制平行處理原則的程度,以及索引建置作業所產生的資源耗用量。

max_degree_of_parallelism 可以是:

  • 1

    抑制平行計劃方案的生成。

  • >1

    根據目前的系統工作負載,將平行索引作業中使用的平行處理原則程度上限限製為指定的數位或更少。

  • 0 (預設值)

    除非根據目前的系統工作負載減少,否則使用伺服器、資料庫或工作負載群組層級所指定的平行處理原則程度。

如需詳細資訊,請參閱 設定平行索引作業。

備註

SQL Server 的所有版本都無法使用平行索引作業。 關於各版本 SQL Server 所支援的功能清單,請參見「 SQL Server 2022 的版本與支援功能 」或 「SQL Server 2025 的版本與支援功能」。

局限性

目前的預覽有下列限制:

  • 無法分割向量索引。 不支援分割區。

  • 數據表必須具有單一數據行、整數、主鍵叢集索引。

  • 向量索引不會復寫到訂閱者。

  • 具有向量索引的數據表會變成唯讀。 當數據表上有向量索引時,不允許修改數據。

    在 Azure SQL 資料庫和 Microsoft Fabric 的 SQL 資料庫中,你可以將 ALLOW_STALE_VECTOR_INDEX資料庫範圍設定ON,這樣表格就能再次可寫入。

    備註

    SQL Server 2025(17.x)目前無法提供 ALLOW_STALE_VECTOR_INDEX 資料庫範圍設定選項。

    當資料插入或更新到表格時,向量索引不會被更新。 要刷新向量索引,必須丟棄並重新建立它。

已知問題

如需詳細資訊,請檢閱已知問題。

權限

用戶必須具有 ALTER 數據表的許可權。

範例

您可以在這裡找到範例中使用的資料庫詳細數據: 使用向量內嵌下載並匯入維琪百科文章

範例假設有一wikipedia_articles個名為的數據表,其類型title_vector為 數據行vector,其會儲存維琪百科文章的標題內嵌。 title_vector 假設是內嵌模型所產生的內嵌,例如 text-embedding-ada-002text-embedding-3-small,其會傳回具有 1,536 個維度的向量。

如需更多範例,包括端對端解決方案,請移至 Azure SQL Database 向量搜尋範例 GitHub 存放庫

範例 1

下列範例會使用 title_vector 計量,cosine在數據行上建立向量索引。

CREATE VECTOR INDEX vec_idx
    ON [dbo].[wikipedia_articles] ([title_vector])
        WITH (METRIC = 'COSINE', TYPE = 'DISKANN');

範例 2

下列範例會使用 (negative) 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 之類的外部連結庫來產生。

下列程式代碼區塊會使用下列步驟建立模擬內嵌:

  1. 啟用目前預覽中必要的追蹤旗標。
  2. 使用數據類型dbo.Articles的數據行embedding建立範例數據表
  3. 使用模擬內嵌數據插入範例數據。
  4. 在上 dbo.Articles.embedding建立向量索引。
  5. 使用函式示範向量相似度搜尋 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;