Sdílet prostřednictvím


VYTVOŘIT VEKTOROVÝ INDEX (Transact-SQL) (Náhled)

Platí na: SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

Vytvořte přibližný index ve sloupci vektoru pro zlepšení výkonu hledání nejbližších sousedů. Další informace o tom, jak funguje vektorové indexování a vektorové vyhledávání, a rozdíly mezi přesným a přibližným vyhledáváním najdete v tématu Vektorové vyhledávání a vektorové indexy v databázovém stroji SQL.

Azure SQL Database a databáze SQL ve službě Fabric

Funkce je v náhledu. Než je začnete používat, nezapomeňte si prohlédnout aktuální omezení .

Poznámka:

Jako funkce ve verzi Preview platí, že technologie uvedená v tomto článku podléhá dodatečným podmínkám použití pro verze Microsoft Azure Preview.

Funkce Preview SQL Server 2025

V SQL Server 2025 je tato funkce v náhledu a může se změnit. Chcete-li použít tuto funkci, musíte povolit PREVIEW_FEATURES databáze.

Než je začnete používat, nezapomeňte si prohlédnout aktuální omezení .

Syntaxe

Transact-SQL konvence syntaxe

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" } ]
[;]

Argumenty

index_name

Název indexu. Názvy indexů musí být v tabulce jedinečné, ale nemusí být jedinečné v rámci databáze. Názvy indexů musí dodržovat pravidla identifikátorů .

objekt

Tabulka, na které je index vytvořen. Musí to být základní tabulka. Zobrazení, dočasné tabulky, místní i globální, se nepodporují.

vector_column

Sloupec, který se má použít k vytvoření vektorového indexu. Musí být typu vektoru .

METRICKÝ

Řetězec s názvem metriky vzdálenosti, který se má použít k výpočtu vzdálenosti mezi těmito dvěma vektory. Podporují se následující metriky vzdálenosti:

  • cosine - Kosinus vzdálenost
  • euclidean - Euklidská vzdálenost
  • dot - (záporná) tečka

TYPE

Typ algoritmu ANN , který se používá k sestavení indexu. V současné době se podporuje pouze DiskANN. DiskANN je výchozí hodnota.

MAXDOP

Přepíše maximální stupeň paralelismu možnost konfigurace pro operaci indexu. Další informace naleznete v tématu Konfigurace serveru: maximální stupeň paralelismu. Pomocí MAXDOP omezte stupeň paralelismu a výsledné spotřeby prostředků pro operaci sestavení indexu.

max_degree_of_parallelism může být:

  • 1

    Potlačuje vytvoření paralelního plánu.

  • >1

    Omezuje maximální stupeň paralelismu použitý v operaci paralelního indexu na zadané číslo nebo méně na základě aktuální systémové úlohy.

  • 0 (výchozí)

    Používá stupeň paralelismu zadaný na úrovni serveru, databáze nebo skupiny úloh, pokud není omezen na základě aktuální systémové úlohy.

Další informace najdete v tématu Konfigurace paralelních operací indexu.

Poznámka:

Paralelní operace indexu nejsou k dispozici v každé edici SQL Serveru. Pro seznam funkcí podporovaných edicí SQL Serveru viz Edice a podporované funkce SQL Server 2022 nebo Edice a podporované funkce SQL Server 2025.

Omezení

Aktuální verze Preview má následující omezení:

  • Vektorový index nelze rozdělit na oddíly. Nepodporuje se žádný oddíl.

  • Tabulka musí mít jeden sloupec, celé číslo, clusterovaný index primárního klíče.

  • Vektorové indexy nejsou replikovány odběratelům.

  • Tabulka s vektorovým indexem se stane jen pro čtení. Nejsou povoleny žádné úpravy dat, zatímco vektorový index je v tabulce.

    V Azure SQL Database a SQL databázi v Microsoft Fabric můžete nastavit ALLOW_STALE_VECTOR_INDEX na databázi na ON, což umožňuje, aby byla tabulka opět zapisovatelná.

    Poznámka:

    Možnost ALLOW_STALE_VECTOR_INDEX konfigurace s omezeným rozsahem databáze momentálně není dostupná v SQL Server 2025 (17.x).

    Vektorový index se neaktualizuje, když jsou do tabulky vložena nebo aktualizována nová data. Pro obnovení vektorového indexu jej musíte vypustit a znovu vytvořit.

Známé problémy

Další informace najdete v tématu Známé problémy.

Povolení

Uživatel musí mít ALTER oprávnění k tabulce.

Příklady

Podrobnosti o databázi použité v ukázce najdete tady: Stáhněte a naimportujte článek Wikipedie s funkcemi Vector Embeddings.

Příklady předpokládají existenci tabulky s wikipedia_articles názvem sloupcem title_vector typu vector , který ukládá vkládání nadpisů článků na Wikipedii. title_vector předpokládá se, že se jedná o vkládaný vygenerovaný model vložení, jako je text-embedding-ada-002 nebo text-embedding-3-small, který vrací vektory s rozměry 1 536.

Další příklady, včetně kompletních řešení, najdete v úložišti Azure SQL Database Vector Search na GitHubu.

Příklad 1

Následující příklad vytvoří vektorový index sloupce title_vector pomocí metriky cosine .

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

Příklad 2

Následující příklad vytvoří vektorový index ve title_vector sloupci pomocí (záporné) dot metriky produktu, omezí paralelismus na 8 a uloží vektor ve SECONDARY skupině souborů.

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

Příklad 3

Základní kompletní příklad použití CREATE VECTOR INDEX a související VECTOR_SEARCH funkce. Vložené kódy jsou napodobeny. Ve skutečném scénáři se vkládání generují pomocí modelu vkládání a AI_GENERATE_EMBEDDINGS nebo externí knihovny, jako je OpenAI SDK.

Následující blok kódu vytvoří napodobení vkládání pomocí následujících kroků:

  1. Povolí příznak trasování, který je nezbytný v aktuální verzi Preview.
  2. Vytvořte ukázkovou tabulku dbo.Articles se sloupcem embedding s vektorem datového typu(5).
  3. Vložte ukázková data pomocí napodobení vložených dat.
  4. Vytvořte vektorový index na dbo.Articles.embedding.
  5. Předveďte hledání vektorové podobnosti pomocí VECTOR_SEARCH() funkce.
-- 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;