微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PGSQL多维数据集选择优化

如何解决PGSQL多维数据集选择优化

我有一张桌子,上面有1000万条记录,像这样:

enter image description here

然后,我希望使用Pgsql CUBE查找所有最匹配的项(由recipe_id区分),最大距离为20。

我目前正在按照以下方式进行操作,但是我认为可以做得更好。为了获得距离小于20的所有匹配项,我需要将LIMIT(在此示例代码中为5000)增加到25000,这会影响查询执行时间。 5000执行时间约为200ms。 25000大约是1500毫秒,太多了。

有没有人知道如何优化顶部?或者,如果有更清洁/更好/更快的方法,或者将我指向另一个方向?

SELECT
    *
FROM ( SELECT disTINCT ON (recipe_id)
        name,macros,macros <-> CUBE (ARRAY [$gram_protein,$gram_carb,$gram_fat]) AS distance
    FROM (
        SELECT
            R.name,IR.macros,IR.recipe_id
        FROM
            indexable_recipes IR
            INNER JOIN recipes R ON IR.recipe_id = R.id
        WHERE
            R.id IN(1,2,3,4,5,6,7,8,9,10)
        ORDER BY
            IR.macros <-> CUBE (ARRAY [$gram_protein,$gram_fat])
        LIMIT 5000) AS toplist
WHERE
    macros <-> CUBE (ARRAY [$gram_protein,$gram_fat]) < 20
ORDER BY
    recipe_id,distance) AS distincted
ORDER BY
    distance

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。