Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL:大表内部连接的替代方案(速度太慢)_Mysql_Sql_Performance_Phpmyadmin - Fatal编程技术网

MYSQL:大表内部连接的替代方案(速度太慢)

MYSQL:大表内部连接的替代方案(速度太慢),mysql,sql,performance,phpmyadmin,Mysql,Sql,Performance,Phpmyadmin,我有两个表(它们更大,有200000多行,这只是一个示例) 我想根据相同的染色体、开始、结束、参考和替代合并它们,并获得: id |Chromosome | Start | End | Reference | Alternative | QUAL | MQ ........................................................................ 1 chr1 12334 12335

我有两个表(它们更大,有200000多行,这只是一个示例)

我想根据相同的染色体、开始、结束、参考和替代合并它们,并获得:

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


为了加快查询速度,除了内部联接,还有其他方法吗?

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

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.
让我们看看你是否遵循这些步骤会有所帮助。
但内部联接是基本联接,如果必须联接两个表,则不能替换它

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

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.
让我们看看你是否遵循这些步骤会有所帮助。
但内部联接是基本联接,如果必须联接两个表,则不能替换它

索引(染色体、开始、结束、参考、替代、id)
--与
分组依据的顺序相同
索引(染色体、开始、结束、参考、替代、id)
--与
分组依据的顺序相同

您可以添加表和索引定义吗。添加解释输出。你说的“另类”是什么意思?
内部连接是每个RDBMS的基本部分之一。如果查询速度慢,则意味着要么您的查询写得不好(可能是非SARGable参数),要么您没有索引来帮助RDBMS返回数据集;因此,它与
x
table scans*(其中
x
是查询中引用的表数(如果一个表引用了两次,例如在
FROM
中,即2个表))。您可以添加表和索引定义吗。添加解释输出。你说的“另类”是什么意思?
内部连接是每个RDBMS的基本部分之一。如果查询速度慢,则意味着要么您的查询写得不好(可能是非SARGable参数),要么您没有索引来帮助RDBMS返回数据集;因此,它与
x
table scans*一样快(其中
x
是查询中引用的表数(如果一个表引用了两次,例如在
FROM
中,即2个表))。我只需要创建索引。非常感谢。我只需要创建索引。非常感谢。
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.