首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MYSQL:用于大型表的内部连接的替代方案(太慢了)

MYSQL:用于大型表的内部连接的替代方案(太慢了)
EN

Stack Overflow用户
提问于 2019-02-28 17:14:50
回答 2查看 302关注 0票数 0

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

代码语言:javascript
复制
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
代码语言:javascript
复制
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

我想根据相等的染色体、开始、结束、引用和替代来合并它们,并获得:

代码语言:javascript
复制
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

我已经尝试过以下方法,但对于大桌子来说太慢了,我需要更快的方法

代码语言:javascript
复制
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

为了加快查询速度,除了内连接之外,还有什么替代方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-28 17:29:30

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

代码语言:javascript
复制
1. Analyze your data.
2. Make sure you have created necessary indexes.
3. In Select statement write only required column, avoid unnecessary columns.
4. Do not write subquery or co-related query until and unless is required.

让我们看看遵循这些步骤是否会有所帮助。但是内连接是基本的连接,如果你必须连接两个表,它是不可替代的。

票数 2
EN

Stack Overflow用户

发布于 2019-03-08 07:15:30

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54922052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档