包含IN的子查询的MySQL查询非常慢

时间:2017-02-02 10:53:48

标签: mysql

我遇到这个问题,我的查询速度很慢,我相信这是因为查询中的IN语句。

看起来像这样:

SELECT * FROM genes g, 
    (SELECT DISTINCT gene_symbol, score FROM page_genes, genes WHERE 
page_genes.page_id IN
    (SELECT page_id FROM findzebra2.page WHERE umls_concept_id ='c0007361')) AS t
WHERE g.gene_id = t.gene_symbol

我听说过使用JOIN语句,但无法弄清楚如何替换它。

表格

基因

genes

page_genes

page_genes

findzebra2.page

findzebra2.page

预期输出

它应与 genes 相同,但过滤后的数据与查询相对应。

2 个答案:

答案 0 :(得分:3)

如果我理解了您的问题,那么您的查询应该是

SELECT g.* FROM genes g JOIN page_genes p on g.gene_id = p.gene_symbol JOIN findzebra2 f ON p.page_id = f.page_id WHERE f.umls_concept_id = 'c0007361';

答案 1 :(得分:0)

试试这个。

select g.*
from genes g
join page p on p.gene_symbol = g.gene_id and p.umls_concept_id = 'c0007361'
join page_genes pg on pg.page_id = g.gene_id