Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Vektordatatypen stöder en valfri bastyp. Som standard använder vektornfloat32. Du kan ange float16 (halvprecision) när reducerad precision är acceptabel. float16 erbjuder en mer kompakt representation som kan minska lagring och förbättra prestandan.
En halvprecisionsflyttalsvektor är en array med tal där varje tal använder 16-bitars flyttalsformatet float16. Denna representation använder hälften av lagringsutrymmet jämfört med 32-bitars float32-formatet . Använd float16 för att minska lagrings- och minnesanvändningen för arbetsbelastningar som embeddings, semantisk sökning och maskininlärning.
float16 ger mindre numerisk precision och ett mindre numeriskt intervall än float32. Denna avvägning gör float16 lämplig för approximativa likhetsscenarier, men mindre lämplig för arbetsbelastningar som kräver högprecisionsaritmetik eller exakt numerisk trovärdighet.
Syntax
För att använda halvprecisionsvärden, ange float16 som vektorbastyp:
column_name VECTOR ( <dimensions> [ , <base_type> ] ) [ NOT NULL | NULL ]
Om du utelämnar <base_type>, är standarden float32.
Viktiga fördelar med float16
Ökad dimension
SQL Database Engine stödjer vektorer med upp till 3 996 dimensioner vid användning av float16, jämfört med 1 998 dimensioner vid användning av float32. De extra dimensionerna stödjer inbäddningar genererade av modeller som ger mer än 1 998 värden.
Minskat fotavtryck för lagring och minne
Att lagra vektorelement i ett 16-bitarsformat minskar lagringsbehovet jämfört med float32. Denna reduktion gör det praktiskt att lagra och fråga högdimensionella vektorer i stor skala.
Lagringseffektivitet och precisionskontroll
Välj den bastyp som är lämplig för arbetsbelastningen:
- Använd float16 för kompakt förvaring när minskad precision är acceptabel.
- Använd float32 för allmänt bruk och arbetsbelastningar som kräver större precision.
Tillgänglighet av funktioner
Halvprecisionvektorer (float16) finns generellt tillgängliga i Azure SQL Database, Azure SQL Managed Instance och SQL database i Microsoft Fabric. Ingen förhandsvisningskonfiguration krävs.
Halvprecisionsvektorer (float16) finns tillgängliga i förhandsvisning i SQL Server 2025. Aktivera konfigurationsalternativet för databasomfång
PREVIEW_FEATURESinnan du använderVECTOR(..., float16). För mer information, se PREVIEW_FEATURES = { ON | OFF }.ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON; GO
Examples
A. Definiera vektorkolumner
Följande exempel definierar separata kolumner som använder standardbastypen float32 och den explicita float16-bastypen :
CREATE TABLE dbo.Float32Vectors
(
id int PRIMARY KEY,
VectorColumn vector(3)
);
CREATE TABLE dbo.Float16Vectors
(
id int PRIMARY KEY,
VectorColumn vector(3, float16)
);
B. Lagra och jämför float16-vektorer
Följande exempel skapar en tabell med en float16-vektorkolumn , infogar exempeldata och använder VECTOR_DISTANCE för att hitta de tre närmaste vektorerna:
CREATE TABLE dbo.Articles
(
id int PRIMARY KEY,
title nvarchar(100),
content nvarchar(max),
embedding vector(5, float16)
);
INSERT INTO dbo.Articles (id, title, content, embedding)
VALUES
(1, N'Intro to AI', N'This article introduces AI concepts.',
'[0.1, 0.2, 0.3, 0.4, 0.5]'),
(2, N'Deep Learning', N'Deep learning is a subset of ML.',
'[0.2, 0.1, 0.4, 0.3, 0.6]'),
(3, N'Neural Networks', N'Neural networks are powerful models.',
'[0.3, 0.3, 0.2, 0.5, 0.1]'),
(4, N'Machine Learning Basics', N'ML basics for beginners.',
'[0.4, 0.5, 0.1, 0.2, 0.3]'),
(5, N'Advanced AI', N'Exploring advanced AI techniques.',
'[0.5, 0.4, 0.6, 0.1, 0.2]');
DECLARE @QueryVector vector(5, float16) =
'[0.3, 0.3, 0.3, 0.3, 0.3]';
SELECT TOP (3)
id,
title,
VECTOR_DISTANCE('cosine', @QueryVector, embedding) AS distance
FROM dbo.Articles
ORDER BY distance;
Anmärkning
Ett vektorindex kräver minst 100 rader med icke-NULL-vektorvärden. För krav och exempel, se CREATE VECTOR INDEX.
C. Granska metadata för vektorbastyp
Följande fråga bekräftar den faktiska bastypen och dimensionerna för en vektorkolumn :
--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');
Utdatakolumner:
vector_dimensions: Antal dimensioner som definierats för vektorn.vector_base_type: Intern numerisk kod för bastypen:-
0= float32 -
1= float16
-
vector_base_type_desc: Läsbar beskrivning av bastypen.
Implicit och explicit konvertering stöds
SQL Server stöder både implicit och explicit konvertering från varchar-, nvarchar- och json-strängar till VECTOR(<dimension_count>, float16), så länge vektorn deklareras med ett explicit dimensionsantal.
DECLARE @j AS JSON = '[1.0, 2.0, 3.0]';
DECLARE @v AS VECTOR(3, float16);
SET @v = CAST (@j AS VECTOR(3, float16)); -- Explicit conversion from JSON to float16
DECLARE @v1 AS VARCHAR (50) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = CAST (@v1 AS VECTOR(3, float16)); -- Explicit conversion from VARCHAR to float16
DECLARE @v1 AS NVARCHAR (50) = N'[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = CAST (@v1 AS VECTOR(3, float16)); -- Explicit conversion from NVARCHAR to float16
Implicit konvertering stöds endast när målvektortypen är helt deklarerad.
-- Implicit conversion from VARCHAR to float16
DECLARE @v1 AS VARCHAR (50) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = @v1;
-- Implicit conversion from NVARCHAR to float16
DECLARE @v1 AS NVARCHAR (50) = N'[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16);
SET @v2 = @v1;
--From JSON_ARRAY to VECTOR
DECLARE @v3 AS VECTOR(3, float16) = JSON_ARRAY(1.0, 2.0, 3.0);
Scenarier som inte stöds eller är felbenägna
I följande exempel visas vanliga fel och begränsningar när man arbetar med datatypen halv precision flyttal vektor i SQL Server.
Explicit och implicit konvertering mellan bastyperna float32 och float16
SQL Server stöder för närvarande inte implicit konvertering mellan VECTOR(float32) och VECTOR(float16).
Dessutom är explicit konvertering med CAST eller CONVERT för närvarande blockerad.
DECLARE @v1 AS VECTOR(3, float16);
DECLARE @v2 AS VECTOR(3, float32) = '[1.0, 2.0, 3.0]';
SET @v1 = CAST (@v2 AS VECTOR(3, float16)); -- Explicit conversion from float32 to float16
Följande fel returneras:
Error: Msg 42238, Level 16, State 1, Line 61
Conversion of vector from data type float32 to float16 is not allowed.
Dimensionsavvikelse
Konvertering mellan vektorer med felmatchade dimensioner tillåts inte och ger upphov till ett matchningsfel för dimensionen.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(4, float16) = NULL;
SET @v1 = @v2;
Följande fel returneras:
Error: Msg 42204, Level 16, State 1, Line 10
The vector dimensions 4 and 3 do not match
Null-hantering
Om en vektor deklareras utan dimensionsantal uppstår ett fel när du tilldelar ett värde till den.
Det här exemplet fungerar:
DECLARE @v1 AS VECTOR(3, float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Men om dimensionsantalet inte har angetts uppstår ett fel:
DECLARE @v1 AS VECTOR(float16) = NULL;
DECLARE @v2 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
SET @v1 = @v2;
Värden utanför intervallet
Värden utanför intervallet för float16 (till exempel värden över 65504,0) orsakar ett fel vid tilldelning.
DECLARE @v AS VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
Följande fel returneras:
Input JSON contains out-of-range values for float16
Blandade bastyper i funktioner
Blandade bastyper i funktioner som VECTOR_DISTANCE inte stöds och skapar ett typfel.
DECLARE @v1 AS VECTOR(3, float32) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, float16) = '[1, 2, 3]';
SELECT VECTOR_DISTANCE('euclidean', @v1, @v2);
Följande fel returneras:
VECTOR_DISTANCE does not support different base types
Arkitektur som inte stöds
Arm64-arkitekturer stöder inte float16. Att använda denna typ orsakar ett runtime-fel.
DECLARE @v1 AS VECTOR(3, float16) = '[1.0, 2.0, 3.0]';
DECLARE @v2 AS VECTOR(3, int) = '[1, 2, 3]';
SELECT VECTOR_DISTANCE('euclidean', @v1, @v2);
Följande fel returneras:
float16 is not supported on ARM64 architecture
SIMD-överflöd
En instruktion, flera databaserade åtgärder (SIMD), till exempel AVX2 eller SSE4.2, kan leda till spillfel om värdena överskrider de intervall som kan representeras.
DECLARE @v AS VECTOR(8) = '[-2.9e+38, ..., 2.9e+38]';
SELECT VECTOR_NORM(@v, 'norm1');
Beteendet beror på inställningen ARITHABORT :
-
ARITHABORT ONresulterar i ett fel -
ARITHABORT OFFresulterar iNULL
Verktygsstöd
SQL Server Management Studio (SSMS) gör för närvarande ingen skillnad mellan float32 och float16 i användargränssnittet. Sök sys.columns för att bekräfta bastypen som används av en vektorkolumn.
Drivrutinsstöd
Följande drivrutiner stödjer inbyggd binär transport för float16-vektorer :
-
Microsoft JDBC Driver 13.4 för SQL Server och senare versioner stödjer IEEE 754-serialisering och deserialisering mellan Java-värden
Float[]och halvprecisionstrådformatet. - Microsoft ODBC Driver 18.7.1 för SQL Server och senare versioner stöder float16-vektorsubtypen.
Använd dessa drivrutinsversioner eller senare för att skicka och ta emot float16-vektorer i nativt binärt format. Drivrutiner som inte stödjer inbyggd float16-transport kan arbeta med vektorer representerade som varchar(max) JSON-arrayer.
Anmärkning
Alla begränsningar som gäller för standardvektortypen med float32-bastypen gäller också för VECTOR(..., float16), om inget annat anges.