gpt4 book ai didi

mysql - 复杂的mysql查询: sorting and pairing

转载 作者:行者123 更新时间:2023-11-29 08:55:59 24 4
gpt4 key购买 nike

我有这张表:

itemA itemB relation

1 2 0.4
1 3 0.8
2 1 0.4
2 3 0.6
3 1 0.8
3 2 0.6

这是一个 1000 万行的表并且正在计数,正如您所看到的,有很多重复的信息。我这样使用这个表:

SELECT itemB WHERE itemA=1 ORDER BY relation DESC LIMIT 1
// in this case - 3

仅在现实生活中,我的限制不是 1,而是 500,因此我得到与我查询的项目具有最高“关系”值的 500 个项目。

我正在考虑缩小表格范围并删除重复项:

itemA itemB relation

1 2 0.4
1 3 0.8
2 3 0.6

这将使表大小减少 50%。但随后我需要一个像这样的查询 -

“在itemA和itemB中查找item x,当找到它时,获取它的对。当你拥有所有对时,根据它们与item x的关系对它们进行排序,然后选择前500个。”

A.您认为这实际上会提高表的使用效率吗?

B.这个查询应该是什么样的?

最佳答案

A.确定这一点的最佳方法是设置几个测试表并对一些潜在查询进行基准测试。

B.您可以通过多种方式做到这一点。其中之一可能是

SELECT DISTINCT LEAST(itemA,itemB),GREATEST(itemA,itemB),relation 
FROM `table`
WHERE itemA = 1
OR itemB = 1
ORDER BY relation DESC
LIMIT 500

或者可能

SELECT otherItem,relation FROM
(
SELECT itemB as otherItem,relation
FROM `table`
WHERE itemA = 1
) UNION DISTINCT (
SELECT itemA as otherItem,relation
FROM `table`
WHERE itemB = 1
) as combined_items
ORDER BY relation DESC
LIMIT 500

关于mysql - 复杂的mysql查询: sorting and pairing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9972695/

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