sql - SQL 中的稀疏点积

标签 sql performance optimization query-optimization

假设我有一个表,其中存储一系列稀疏向量。稀疏向量意味着它仅在数据结构中显式存储非零值。我可以有一个 100 万维向量,但我只存储非零维度的值。因此,大小与非零条目的数量成正比,而不是向量的维数。

表定义如下: 矢量_id:整数 维度:整数 值: float

现在,在正常的编程领域,我可以在 O(|v1| + |v2|) 时间内计算两个向量的内积或点积。基本上,该算法是存储按维度排序的稀疏向量,并迭代每个维度中的维度,直到发现维度之间的冲突,并将共享维度的值相乘,然后不断相加,直到到达任一向量的末尾.

在 SQL 中实现这一目标的最快方法是什么?

最佳答案

您应该能够在一个查询中复制此算法:

select sum(v1.value * v2.value)
from vectors v1
inner join vectors v2
on v1.dimension = v2.dimension
where v1.vector_id = ...
and v2.vector_id = ...

关于sql - SQL 中的稀疏点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1060458/

相关文章:

sql - 如何使用 Active Record 查找包含重复数据的记录

c - 一次构建后从 Visual Studio 2017 调试/运行非常慢

java - 增强的 for 循环性能

mysql - mysql中的文本索引与整数索引

java - 如何更改 Java 中应返回类的大量 if/else

mysql - 合并同一个表sql中的行

sql - peewee 是否可以嵌套 SELECT 查询,以便外部查询在内部查询的聚合上进行选择?

mysql - UPDATE 的目标表不可更新

javascript - HTML5 游戏刷新率与 requestAnimationFrame

c# - 为什么 CLR 通过初始化优化掉未使用的静态字段?