【问题标题】:Sparse dot product in SQLSQL中的稀疏点积
【发布时间】:2010-11-06 19:45:44
【问题描述】:

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

表定义是这样的: vector_id : 整数 维度:整数 值:浮动

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

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

【问题讨论】:

    标签: sql performance optimization query-optimization


    【解决方案1】:

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

    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 = ...
    

    【讨论】:

    • 那么你将如何索引表?通过(vector_id,维度)?
    • 按 (vector_id, dimension) 编制索引最有意义,因为它们应该在表中定义唯一记录。
    • 这基本上是我想出的——直到其他人发布更快的东西,我会把它给你。谢谢!
    猜你喜欢
    • 2016-08-15
    • 2013-01-29
    • 2012-11-06
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    • 2016-08-25
    相关资源
    最近更新 更多