gpt4 book ai didi

sql - 关系数据库是否非常适合矢量计算?

转载 作者:行者123 更新时间:2023-12-03 17:20:00 25 4
gpt4 key购买 nike

基本的表架构看起来像这样(我正在使用MySQL BTW):


integer unsigned vector-id

integer unsigned fk-attribute-id

float attribute-value

primary key (vector-id,fk-attribute-id)


向量在表中表示为具有相同向量ID的多个记录

我需要用该表中存在的所有向量的点积(也就是欧氏距离)构建一个单独的表。因此,我需要一个如下所示的结果表:


integer unsigned fk-vector-id-a

integer unsigned fk-vector-id-b

float dot-product

...这样的...


integer unsigned fk-vector-id-a

integer unsigned fk-vector-id-b

float euclidean-distance


产生结果的最佳查询结构是什么?

对于非常大的向量,关系数据库是解决此问题的最佳方法,还是应该在应用程序中对向量进行内部化并在那里进行计算?

最佳答案

INSERT
INTO dot_products
SELECT v1.vector_id, v2.vector_id, SUM(v1.attribute_value * v2.attribute_value)
FROM attributes v1
JOIN attributes v2
ON v2.attribute_id = v1.attribute_id
GROUP BY
v1.vector_id, v2.vector_id


MySQL中,这可以更快:

INSERT
INTO dot_products
SELECT v1.vector_id, v2.vector_id,
(
SELECT SUM(va1.attribute_value * va2.attribute_value)
FROM attributes va1
JOIN attributes va2
ON va2.attribute_id = va1.attribute_id
WHERE va1.vector_id = v1.vector_id
AND va2.vector_id = v2.vector_id
)
FROM vector v1
CROSS JOIN
vector v2

关于sql - 关系数据库是否非常适合矢量计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1335906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com