2017-02-02 67 views
2

我遇到這個問題,我的查詢速度很慢,我相信這是因爲我在查詢中使用了IN語句。包含IN的子查詢的MySQL查詢非常慢

它看起來像這樣:

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

預期輸出

它應該是相同的表作爲基因但與對應於所述查詢過濾的數據。

+0

請分享你的表結構和預期產出 – denny

+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';

+0

這工作完美,並提高了很多速度。謝謝! – Anonymous

+0

感謝您接受答案 – denny

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 
+0

頁犯規時,MySQL的性能下降不包含列gene_symbol – Anonymous

+0

然後您可以根據需求調整列。但是你可以知道連接和他們的鏈接列。 –