Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2025 (17.x) Preview
Vanaf SQL Server 2025 (17.x) Preview kunt u het onderliggende basistype voor het vectorgegevenstype opgeven.
Vector gebruikt float32 standaard als basistype.
float16 (halve precisie) is een alternatief type voor scenario's waarbij verminderde precisie acceptabel is. Het biedt een compacter alternatief door de opslag te verminderen en de prestaties te verbeteren.
Een drijvendekommavector met halve precisie is een verzameling getallen, waarbij elk getal wordt voorgesteld met een 16-bits drijvendekommaformaat (float16). Deze weergave verbruikt de helft van het geheugen van een standaard 32-bits float met één precisie. Gebruik deze vectortypen om geheugen en bandbreedte te besparen, met name in deep learning- en vectordatabases, door enige precisie af te handelen voor efficiëntie.
Hoewel float16 het aanzienlijke voordelen biedt voor opslag en prestaties, biedt het een verminderde numerieke precisie in vergelijking met float32. Deze afweging maakt het zeer geschikt voor benaderingsscenario's met overeenkomsten, zoals semantische zoekopdrachten, maar minder geschikt voor workloads waarvoor rekenkundige of exacte numerieke nauwkeurigheid is vereist.
Belangrijkste voordelen van float16-ondersteuning
Verbeterde dimensionaliteitsondersteuning
SQL Server ondersteunt vectoren met maximaal 3996 dimensies (
1998 × 2) bij gebruikfloat16. Deze functie verdubbelt de beperking van 1998 dimensies voorfloat32. Deze mogelijkheid maakt expressieve insluitingen en compatibiliteit met grotere modellen mogelijk, bijvoorbeeldtext-embedding-large.Verminderde opslag- en geheugenvoetafdruk
Het opslaan van vectoren in een 16-bits indeling vermindert de hoeveelheid opslagruimte die nodig is in vergelijking met vectoren met volledige precisie. Dit maakt het mogelijk om high-dimensionale vectoren op schaal op te slaan en op te vragen. Deze optimalisatie verbetert ook de gegevensdichtheid, wat de queryprestaties in vectorzoekscenario's kan verbeteren.
Efficiëntie en precisiebeheer van opslag
Kies het meest geschikte basistype:
-
float16voor compacte opslag -
float32voor algemene gebruikstaken en hogere precisietaken
Deze flexibiliteit zorgt voor optimaal resourcegebruik zonder afbreuk te doen aan de nauwkeurigheid van toepassingen.
-
Voorbeeldsyntaxis
De syntaxis van het gebruik is vergelijkbaar met het gegevenstype vector . Als u echter wilt gebruiken float16, geeft u het basistype expliciet op.
column_name VECTOR(<dimensions> [, <base_type>]) [NOT NULL | NULL]
Beschikbaarheid van functies
float16 vector is momenteel beschikbaar voor preview. Als u wilt testen, schakelt u de configuratieoptie voor databasebereik PREVIEW_FEATURES in. Raadpleeg PREVIEW_FEATURES = { AAN | UIT }.
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON;
GO
Voorbeelden
Definieer een vectorkolom in een CREATE TABLE instructie met behulp van het standaardbasistype of een expliciet basistype.
Standaard is float32het basistype .
-- Default: float32
CREATE TABLE ExampleTable
(
id INT PRIMARY KEY,
VectorColumn VECTOR (3)
);
Als u halve precisie wilt gebruiken, moet u float16 expliciet opgeven.
-- Explicit float16
CREATE TABLE ExampleTable (
id INT PRIMARY KEY,
VectorColumn VECTOR(3, float16)
);
In het volgende voorbeeld wordt een tabel gemaakt met een half-precision float- vectorkolom en worden er gegevens in ingevoegd.
-- Step 0: Enable Preview Features
ALTER DATABASE SCOPED CONFIGURATION
SET PREVIEW_FEATURES = ON;
GO
-- Step 1: Create a Table with a VECTOR(5, float16) Column
CREATE TABLE dbo.Articles
(
id INT PRIMARY KEY,
title NVARCHAR(100),
content NVARCHAR(MAX),
embedding VECTOR(5, float16)
);
-- 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: Perform a Vector Similarity Search Using VECTOR_DISTANCE function
DECLARE @v VECTOR(5, float16) = '[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP (3)
id,
title,
VECTOR_DISTANCE('cosine', @v, embedding) AS distance
FROM dbo.Articles
ORDER BY distance;
-- Step 4: Optionally Create a Vector Index
CREATE VECTOR INDEX vec_idx ON Articles(embedding)
WITH (
metric = 'cosine',
type = 'diskANN'
);
-- Step 5: Perform a Vector Similarity Search
DECLARE @qv VECTOR(5, float16) = '[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;
Metagegevens van vectorbasistype controleren
De volgende query bevestigt het werkelijke basistype en de afmetingen van een vectorkolom :
--Inspect Vector Base type Metadata in sys.columns
SELECT name AS column_name,
system_type_id,
user_type_id,
vector_dimensions,
vector_base_type,
vector_base_type_desc
FROM sys.columns
WHERE object_id = OBJECT_ID('dbo.Articles');
Uitvoerkolommen:
vector_dimensions: Het aantal dimensies dat is gedefinieerd voor de vector.vector_base_type: Interne numerieke code voor het basistype:0=float321=float16
vector_base_type_desc: Leesbare beschrijving van het basistype.
Ondersteunde impliciete en expliciete conversie
SQL Server ondersteunt zowel impliciete als expliciete conversie van varchar-, nvarchar- en json-tekenreeksen naar VECTOR(<dimension_count>, float16), zolang de vector wordt gedeclareerd met een expliciet aantal dimensies.
DECLARE @j JSON = '[1.0, 2.0, 3.0]';
DECLARE @v VECTOR(3, float16);
SET @v = CAST(@j AS VECTOR(3, float16)); -- Explicit conversion from JSON to float16
DECLARE @v1 VARCHAR(50) = '[1.0, 2.0, 3.0]';
DECLARE @v2 VECTOR(3, float16);
SET @v2 = CAST(@v1 AS VECTOR(3, float16)); -- Explicit conversion from VARCHAR to float16
DECLARE @v1 NVARCHAR(50) = N'[1.0, 2.0, 3.0]';
DECLARE @v2 VECTOR(3, float16);
SET @v2 = CAST(@v1 AS VECTOR(3, float16)); -- Explicit conversion from NVARCHAR to float16
Impliciete conversie wordt alleen ondersteund wanneer het doelvectortype volledig is gedeclareerd.
-- Implicit conversion from VARCHAR to float16
DECLARE @v1 VARCHAR(50) = '[1.0, 2.0, 3.0]';
DECLARE @v2 VECTOR(3, float16);
SET @v2 = @v1;
-- Implicit conversion from NVARCHAR to float16
DECLARE @v1 NVARCHAR(50) = N'[1.0, 2.0, 3.0]';
DECLARE @v2 VECTOR(3, float16);
SET @v2 = @v1
--From JSON_ARRAY to VECTOR
DECLARE @v3 VECTOR(3, float16) = JSON_ARRAY(1.0, 2.0, 3.0);
Niet-ondersteunde of foutgevoelige scenario's
In de volgende voorbeelden worden veelvoorkomende fouten en beperkingen gemarkeerd bij het werken met gegevenstype met een halve precisie float vector in SQL Server.
Expliciete en impliciete conversie tussen basistypen float32 en float16
SQL Server biedt momenteel geen ondersteuning voor impliciete conversie tussen VECTOR(float32) en VECTOR(float16).
Daarnaast is expliciete conversie met CAST of CONVERT momenteel geblokkeerd.
DECLARE @v1 VECTOR(3, float16);
DECLARE @v2 VECTOR(3, float32) = '[1.0, 2.0, 3.0]';
SET @v1 = CAST(@v2 AS VECTOR(3, float16)); -- Explicit conversion from float32 to float16
-- ❌ Error: Msg 42238, Level 16, State 1, Line 61
Conversion of vector from data type float32 to float16 is not allowed.
Dimensie komt niet overeen
Conversie tussen vectoren met niet-overeenkomende dimensies is niet toegestaan en leidt tot een onjuiste dimensiefout.
DECLARE @v1 VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 VECTOR(4, float16) = NULL;
SET @v1 = @v2;
-- Error: Msg 42204, Level 16, State 1, Line 10
The vector dimensions 4 and 3 do not match
Nullverwerking
Als een vector wordt gedeclareerd zonder dimensieaantal, ontstaat er een fout wanneer er een waarde aan wordt toegekend.
DECLARE @v1 VECTOR(3, float16) = NULL;
DECLARE @v2 VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2; -- This works
--However, if the dimension count is not specified, it raises an error
DECLARE @v1 VECTOR(float16) = NULL;
DECLARE @v2 VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Waarden buiten bereik
Waarden buiten het bereik voor float16 (bijvoorbeeld boven 65504.0) veroorzaken een fout tijdens de toewijzing.
DECLARE @v VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
-- Error: Input JSON contains out-of-range values for float16
Gemengde basistypen in functies
Gemengde basistypen in functies zoals VECTOR_DISTANCE worden niet ondersteund en veroorzaken een typefout.
DECLARE @v1 VECTOR(3, float32) = '[1.0, 2.0, 3.0]';
DECLARE @v2 VECTOR(3, float16) = '[1, 2, 3]';
SELECT VECTOR_DISTANCE('euclidean', @v1, @v2);
-- Error: VECTOR_DISTANCE does not support different base types
Niet-ondersteunde architectuur
float16 wordt niet ondersteund in Arm64-architecturen en het gebruik ervan veroorzaakt een runtimefout
DECLARE @v1 VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 VECTOR(3, int) = '[1, 2, 3]';
SELECT VECTOR_DISTANCE('euclidean', @v1, @v2);
-- Error: float16 is not supported on ARM64 architecture
SIMD-overflow
Bewerkingen op basis van SIMD (bijvoorbeeld AVX2, SSE4.2) kunnen overloopfouten opleveren als waarden de vertegenwoordigbare bereiken overschrijden.
DECLARE @v AS VECTOR (8) = '[-2.9e+38, ..., 2.9e+38]';
SELECT VECTOR_NORM(@v, 'norm1');
-- Behavior depends on ARITHABORT setting:
-- ARITHABORT ON → Error
-- ARITHABORT OFF → NULL
Ondersteuning voor hulpmiddelen
SQL Server Management Studio (SSMS) maakt momenteel geen onderscheid tussen float32 en float16 in de gebruikersinterface. Gebruik sys.columns dit om het werkelijke basistype te bevestigen dat in een schema wordt gebruikt.
Binaire transportondersteuning voor float16 vectoren nog niet beschikbaar
float16 vectoren worden momenteel verzonden als varchar(max) (JSON-matrix) via TDS. Binaire transportondersteuning voor float16 is nog niet beschikbaar in stuurprogramma's zoals ODBC, JDBC en .NET.
Opmerking
Alle beperkingen die van toepassing zijn op het standaardvectortype (met float32) zijn ook van toepassing op VECTOR(float16).