MYSQL:使用BIG TABLES替代INNER JOIN(太慢了)

时间:2019-02-28 09:14:50

标签: mysql sql performance phpmyadmin

我有两个表(它们更大,有200,000行,这只是一个例子)

Table1:temptable
id         |Chromosome | Start | End | Reference | Alternative | QUAL | MQ
........................................................................
NULL         chr1       12334  12335    A          TT            10   20
NULL         chr1       12334  12335    C          TT            5    3
NULL         chr2       123    123      A           T            1    2
NULL         chr2       34     34       A           T            11   60
NULL         chr3       12     12       A           T            6    NULL
Table2:TableVariants2
id          | Chromosome | Start | End | Reference | Alternative 
.............................................................
1            chr1          12334  12335   A        TT
2            chr1          12334  12335   C        TT
3            chr2          123    123     A         T
4            chr2          34     34      A         T
5            chr3          12     12      A         T

我想基于相等的染色体,开始,结束,参考和替代来合并它们,并获得:

id         |Chromosome | Start | End | Reference | Alternative | QUAL | MQ
........................................................................
1           chr1       12334  12335     A             TT         10     20
2           chr1       12334  12335     C             TT         5      3
3           chr2       123    123       A              T         1      2
4           chr2       34     34        A              T         11     60
5           chr3       12     12        A              T         6     NULL

我尝试了以下方法,但是对于大表来说太慢了,我需要更快的方法

SELECT B.Maxid, A.Chromosome, A.Start, A.End, A.Reference, A.Alternative , A.QUAL,A.MQ 
FROM temptable A
INNER JOIN ( SELECT `Chromosome`, `Start`, `End`, `Reference`,`Alternative`, MAX(id) AS Maxid FROM TableVariants2 GROUP BY `Chromosome`, `Start`, `End`, `Reference`,`Alternative`) B
ON A.Chromosome=B.Chromosome AND A.Start=B.Start AND A.End=B.End AND A.Reference=B.Reference AND A.Alternative=B.Alternative

INNER JOIN可以替代其他方法来加快查询速度吗?

2 个答案:

答案 0 :(得分:2)

在编写查询时,您可以遵循以下几点:

"Create statistics table"

让我们看看您是否可以执行以下步骤。 但是内部联接是基本联接,如果必须联接两个表,则无法替换。

答案 1 :(得分:0)

INDEX(Chromosome, Start, End, Reference, Alternative, id)-与GROUP BY相同的顺序。