2017-02-02 10 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

ことSHOLDあなたのテーブル構造と予想される出力 – denny

+0

NOTEを共有してください:サブクエリ/機能を使用するときにMySQLのパフォーマンスが低下し... –

答えて

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

ページdoesntのを列が含まれていないgene_symbol – Anonymous

+0

次に、必要に応じて列を調整できます。しかし、結合と結合された列のヒントを得ることができます。 –

関連する問題