我有表 33_PROBLEM,其中包含 ROOT 和 ROOT_CUBED 列。十我有一个简单的过程,插入数据,让我们从-10000到10000的ROOT开始,这意味着ROOT_CUBED从-10000^3到10000^3。
问题很简单: 如何获取 ROOT_CUBED 值的所有三元组组合,并将其添加到给定的数字中?
换种说法: 我想找到 A、B、C 哪个为真,即 A^3 + B^3 + C^3 = number_given
<小时/>以下是搜索号码 33 的一些示例:
SELECT T1.r1,
T2.r2,
T3.r3
FROM (SELECT root_3 AS R1
FROM `33_problem`) AS T1,
(SELECT root_3 AS R2
FROM `33_problem`) AS T2,
(SELECT root_3 AS R3
FROM `33_problem`) AS T3
WHERE T1.r1 + T2.r2 + T3.r3 = 33
它工作得很好......在少量的行上。此查询生成 (COUNT *)^3 行,对于 20000 个输入行,这等于 8e+12 行! ... RIP 服务器...
<小时/>解决这个问题的正确方法是什么?
<小时/>(我从 https://www.youtube.com/watch?v=wymmCdLdPvM 得到了这个想法,我希望,当有人给出一些答案时,我会更好地理解 SQL 是如何工作的,以及查询和数据库应该如何设计,即使对于大数据也能很好地工作)
最佳答案
1) 您可以尝试仅选择连续的三元组,例如 R1 <= R2 <= R3,
2) 如果有重复项,请选择不同的
SELECT T1.R1
,T2.R2
,T3.R3
FROM (
SELECT DISTINCT ROOT_3 AS R1
FROM `33_PROBLEM`
) AS T1
,(
SELECT DISTINCT ROOT_3 AS R2
FROM `33_PROBLEM`
WHERE R2>=R1
) AS T2
,(
SELECT DISTINCT ROOT_3 AS R3
FROM `33_PROBLEM`
WHERE R3>=R2
) AS T3
WHERE T1.R1 + T2.R2 + T3.R3 = 33
关于mysql - SQL - 查询优化以处理大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38207078/