ivfsq参数设置

参数

create index ivfsq_name on v using ivfsq(vec distance) with (lists=100,rs=RS_minmax,rs_arg=0, dtype='QT_8bit') ;
set ivfsq.probes = 2;

在这里插入图片描述

第一行为默认值,第一列的值不可以省略,其他的列可以进行省略。

参数内容

参数 可选值 说明
vec vector, Halfvector 向量的类型,分为vector或者Halfvec
distance vector_l2_ops, vector_ip_ops , vector_cosine_ops 不同的距离计算
lists 1-32768 创建索引的时候,需要创建的聚类中心数
rs RS_minmax, RS_meanstd, RS_quantiles, RS_optim 量化范围的统计方法。
rs_arg 0, 0.1-0.2, 0.3-0.5 范围缩放因子,根据 rs 方法确定范围扩展比例。
dtype int8, int4, int6, float16 数据类型,支持无符号量化;例如:int8 表示 8 位整型。
probes 10 查询时会探测的倒排列表的数量。

vec

这两个结构体是 PostgreSQL pgvector 扩展(或类似向量存储扩展)中定义的向量数据结构,主要用于存储高维向量数据,并用于 相似性搜索(ANN, Approximate Nearest Neighbor) 计算。

vector

typedef struct Vector
{
    int32		vl_len_;		/* varlena header (do not touch directly!) */
    int16		dim;			/* number of dimensions */
    int16		unused;			/* reserved for future use, always zero */
    float		x[FLEXIBLE_ARRAY_MEMBER];
} Vector;

Vector 结构体用于 存储高精度(32-bit float 类型)浮点向量。

字段 类型 作用
vl_len_ int32 PostgreSQL 的 varlena 变长存储头,用于管理变长数据结构
dim int16 向量的维度
unused int16 预留字段,目前始终为 0
x float[FLEXIBLE_ARRAY_MEMBER] 实际存储的向量数据(浮点数数组)

🔹 为什么需要这两个向量结构体?
1️⃣ Vector(标准 float 向量)
✅ 优点:
高精度计算,适用于需要精确计算 L2(欧几里得距离)、内积、余弦相似度 等任务。
适用于对计算精度要求较高的应用,如:
高精度图像特征匹配
语义搜索
精确的机器学习推理
❌ 缺点:
占用更多存储空间,对于高维度向量(如 512 维或 1024 维),存储成本较高。

Halfvector

typedef struct HalfVector
{
    int32		vl_len_;		/* varlena header (do not touch directly!) */
    int16		dim;			/* number of dimensions */
    int16		unused;			/* reserved for future use, always zero */
    half		x[FLEXIBLE_ARRAY_MEMBER];
} HalfVector;

HalfVector 结构体用于 存储 16-bit 半精度浮点数(half 类型)。

字段 类型 作用
vl_len_ int32 变长存储头(PostgreSQL varlena 类型)
dim int16 向量的维度
unused int16 预留字段,目前始终为 0
x half[FLEXIBLE_ARRAY_MEMBER] 实际存储的向量数据(半精度浮点数数组)

2️⃣ HalfVector(半精度 half 向量)
✅ 优点:
更少的存储空间(half 是 16-bit,而 float 是 32-bit,节省 50% 存储)。
适用于 近似计算、神经网络和深度学习,因为许多 AI 模型 只需要半精度浮点计算,减少存储成本和计算开销。
适用于 大规模向量索引存储(如 IVFPQ),减少存储占用,提高搜索速度。
❌ 缺点:
计算精度较低,可能导致搜索结果精度下降,不适用于严格要求高精度计算的任务。

两者对比

特性 Vector (float) HalfVector (half)
存储精度 32-bit 浮点数(高精度) 16-bit 半精度浮点数(低精度)
存储空间 需要更多存储 1/2 存储大小(节省 50% 空间)
计算速度 高精度计算,但计算量更大 更快的计算速度,适用于 ANN 近似计算
适用场景 需要高精度计算,如图像搜索、精确相似度匹配 大规模数据存储,减少存储开销,如 ANN、深度学习
缺点 存储开销较大 精度较低,可能影响搜索准确度

distance

✅ 1. vector_l2_ops(L2 距离 / 欧几里得距离)

欧几里得距离(L2 距离)是衡量两个向量在空间中的距离,定义如下:
d L 2 ( a , b ) = ∥ a − b ∥ 2 = ∑ i = 1 d ( a i − b i ) 2 d_{\mathrm{L} 2}(\mathbf{a}, \mathbf{b})=\|\mathbf{a}-\mathbf{b}\|_{2}=\sqrt{\sum_{i=1}^{d}\left(a_{i}-b_{i}\right)^{2}} dL2(a,b)=ab2=i=1d(aibi)2
其中:
a = ( a 1 , a 2 , … , a d ) \mathbf{a}=(a_1,a_2,…,a_d) a=(a1,a2,,ad) 是向量 a \mathbf{a} a
b = ( b 1 , b 2 , … , b d ) \mathbf{b}=(b_1,b_2,…,b_d) b=(b1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haven-852

你的鼓励是对我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值