Anteckning
Å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: Förhandsversion av SQL Server 2025 (17.x)
Från och med förhandsversionen av SQL Server 2025 (17.x) kan du ange den underliggande bastypen för vektordatatypen . Som standard används float32 som bastyp.
float16 (halvprecision) är en alternativ typ för scenarier där minskad precision är acceptabel. Det erbjuder ett mer kompakt alternativ genom att minska lagringen och förbättra prestandan.
En halvprecisions flyttalsvektor är en vektor eller samling av tal, där varje tal representeras med hjälp av ett flyttal med 16-bitars halvprecision (float16) format. Den här representationen förbrukar hälften av minnet för ett vanligt 32-bitars flyttal med enkel precision. Använd dessa vektortyper för att spara minne och bandbredd, särskilt i djupinlärnings- och vektordatabaser, genom att byta bort viss precision för effektivitet.
Även om float16 det ger betydande fördelar med lagring och prestanda ger det minskad numerisk precision jämfört med float32. Den här kompromissen gör den väl lämpad för ungefärliga likhetsscenarier, till exempel semantisk sökning, men mindre lämplig för arbetsbelastningar som kräver aritmetik med hög precision eller exakt numerisk återgivning.
Viktiga fördelar med float16-stöd
Stöd för ökad dimensionalitet
SQL Server stöder vektorer med upp till 3 996 dimensioner (
1998 × 2) när du använderfloat16. Den här funktionen dubblar begränsningen 1 998 dimensioner förfloat32. Den här funktionen möjliggör mer uttrycksfulla inbäddningar och kompatibilitet med större modeller, till exempeltext-embedding-large.Minskat fotavtryck för lagring och minne
Lagring av vektorer i ett 16-bitarsformat minskar avsevärt mängden lagringsutrymme som krävs jämfört med vektorer med full precision. Detta gör det möjligt att lagra och köra frågor mot högdimensionella vektorer i stor skala. Den här optimeringen förbättrar också datadensiteten, vilket kan förbättra frågeprestanda i scenarier för vektorsökning.
Lagringseffektivitet och precisionskontroll
Välj den lämpligaste bastypen:
-
float16för kompakt lagring -
float32för allmän användning och uppgifter med högre precision
Den här flexibiliteten säkerställer optimal resursanvändning utan att äventyra programmets noggrannhet.
-
Exempelsyntax
Användningssyntaxen liknar vektordatatypen . Dock, om du vill använda float16, anger du bastypen explicit.
column_name VECTOR(<dimensions> [, <base_type>]) [NOT NULL | NULL]
Tillgänglighet av funktioner
float16 vektor är för närvarande tillgänglig för förhandsversion. Om du vill testa aktiverar du konfigurationsalternativet PREVIEW_FEATURES med databasomfattning. Mer information finns i PREVIEW_FEATURES = { ON | AV }.
ALTER DATABASE SCOPED CONFIGURATION SET PREVIEW_FEATURES = ON;
GO
Examples
Definiera en vektorkolumn i en CREATE TABLE instruktion med antingen standardbastypen eller en explicit.
Som standard är float32bastypen .
-- Default: float32
CREATE TABLE ExampleTable
(
id INT PRIMARY KEY,
VectorColumn VECTOR (3)
);
Om du vill använda halv precision anger du float16 explicit.
-- Explicit float16
CREATE TABLE ExampleTable (
id INT PRIMARY KEY,
VectorColumn VECTOR(3, float16)
);
I följande exempel skapas en tabell med en halv precisionsflottavektorkolumn och infogar data i den.
-- 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;
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=float321=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 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
Implicit konvertering stöds endast när målvektortypen är helt deklarerad.
-- 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);
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 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.
Dimensionsavvikelse
Konvertering mellan vektorer med felmatchade dimensioner tillåts inte och ger upphov till ett matchningsfel för dimensionen.
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
Null-hantering
Om en vektor deklareras utan dimensionsantal uppstår ett fel när du tilldelar ett värde till den.
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;
Värden utanför intervallet
Out-of-range-värden för float16 (till exempel över 65504.0) genererar ett fel under tilldelningen.
DECLARE @v VECTOR(3, float16) = '[1.0, 2.0, 70000.0]';
-- Error: 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 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
Arkitektur som inte stöds
float16 stöds inte i Arm64-arkitekturer, och om du använder den genereras ett körningsfel
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-överflöd
SIMD-baserade åtgärder (till exempel AVX2, SSE4.2) kan generera spillfel om värdena överskrider visningsbara intervall.
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
Verktygsstöd
SQL Server Management Studio (SSMS) skiljer för närvarande inte mellan float32 och float16 i användargränssnittet. Använd sys.columns för att bekräfta den faktiska bastypen som används i ett schema.
Stöd för binär transport för float16-vektorer är ännu inte tillgängligt
float16 vektorer överförs för närvarande som varchar(max) (JSON-matris) över TDS. Stöd för binär transport för float16 är ännu inte tillgängligt i drivrutiner som ODBC, JDBC och .NET.
Anmärkning
Alla begränsningar som gäller för standardvektortypen (med float32) gäller även för VECTOR(float16).