Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предварительная версия 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_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
с вектором типа данных(5). - Вставка примеров данных с макетом внедренных данных.
- Создайте векторный индекс в
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;