Поделиться через


CREATE VECTOR INDEX (Transact-SQL)

Предварительная версия SQL Server 2025 (17.x)

Создайте приблизительный индекс в столбце векторов, чтобы повысить производительность поиска ближайших соседей. Дополнительные сведения о том, как работает индексирование векторов и векторный поиск, а также различия между точным и приблизительным поиском, см. векторах в ядре СУБД SQL.

Предварительная версия функции

Замечание

Эта функция в предварительной версии и подлежит изменению. Не забудьте прочитать условия использования предварительной версии в соглашениях об уровне обслуживания (SLA) для веб-служб.

Эта функция предоставляется в виде предварительной версии. Чтобы использовать эту функцию, необходимо включить следующие флаги трассировки:

DBCC TRACEON(466, 474, 13981, -1)

Прежде чем использовать его, обязательно ознакомьтесь с текущими ограничениями .

Синтаксис

Соглашения о синтаксисе Transact-SQL

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 - Евклидеан расстояние
  • dot - (Отрицательное) Dot product

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 или Editions и поддерживаемых функциях SQL Server 2025 Preview.

DROP_EXISTING = { ON | OFF }

Можно удалить и перестроить существующий векторный индекс с измененными спецификациями и сохранить то же имя индекса. Значение по умолчанию — OFF.

  • ON

    Указывает удалить и перестроить существующий индекс, который должен иметь имя, совпадающее с именем параметра index_name.

  • OFF

    Указывает не удалять и перестраивать существующий индекс. SQL Server отображает ошибку, если индекс с указанным именем уже существует.

Ограничения

Текущая предварительная версия имеет следующие ограничения:

  • Векторный индекс нельзя секционировать. Нет поддержки секций.
  • Таблица должна иметь один столбец, целое число, кластеризованный первичный ключ.
  • Таблица с векторным индексом становится доступной только для чтения. Изменение данных не допускается, пока векторный индекс отсутствует в таблице.
  • Векторные индексы не реплицируются подписчикам.

Разрешения

Пользователь должен иметь ALTER разрешение на таблицу.

Примеры

Подробные сведения о базе данных, используемой в примере, можно найти здесь: скачайте и импортируйте статью Википедии с векторными внедрениями.

В примерах предполагается наличие таблицы wikipedia_articles с именем столбца title_vector типа vector , в который хранятся встраивания заголовков статей Википедии. title_vector предполагается, что внедрение создается с помощью модели внедрения, такой как text-embedding-ada-002 или text-embedding-3-small, которая возвращает векторы с 1536 измерениями.

Дополнительные примеры, включая комплексные решения, см. в репозитории GitHub для векторного поиска базы данных SQL Azure.

Пример 1

В следующем примере создается векторный индекс столбца title_vectorcosine с помощью метрики.

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.

В следующем блоке кода создаются макеты внедрения с помощью следующих действий:

  1. Включает флаг трассировки, необходимый в текущей предварительной версии.
  2. Создайте пример таблицы dbo.Articles со столбцом embedding с вектором типа данных(5).
  3. Вставка примеров данных с макетом внедренных данных.
  4. Создайте векторный индекс в dbo.Articles.embedding.
  5. Продемонстрировать поиск сходства векторов с функцией 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;