2011-01-11 5 views
1

私は2つのテーブルに参加しています。 テーブルunique_nucleosome_reには、約60万レコードがあります。 別のテーブルには20,000レコードがあります。 WHERE句の条件に、 によってEXPLAINの回答が異なり、奇妙なことがパフォーマンスです。 の場合n.chromosome = 'X' 約3分かかりました。 の場合n.chromosome = '2L' それは30分以上かかって接続が終了しました。MySQLの低速クエリとEXPLAINが奇妙な回答を返しました

SELECT n.name , t.transcript_start , n.start 
FROM unique_nucleosome_re AS n 
INNER JOIN tss_tata_range AS t 
ON t.chromosome = n.chromosome 
WHERE (t.transcript_start > n.end AND t.ts_minus_250 < n.start) 
     AND n.chromosome = 'X'  
ORDER BY t.transcript_start 
; 

これはEXPLAINの回答です。 WHEREがn.chromosomeある場合= 'X'

'1', 'SIMPLE', 'n', 'ALL', 'start_idx,end_idx,chromo_start', NULL, NULL, NULL, '606096', '48.42', 'Using where; Using join buffer' 

WHEREがn.chromosome = '2L'

'1', 'SIMPLE', 'n', 'ref', 'start_idx,end_idx,chromo_start', 'chromo_start', '17', 'const', '68109', '100.00', 'Using where' 

ときXまたは2Lのレコードの数がほぼ同じです。 私は最後のカップルの日を過ごしましたが、私はそれを理解できませんでした。それは私が見ることができない、またはバグかもしれない簡単な間違いかもしれません。 私を助けることができますか?

+0

時にはオプティマイザが盗んでいるので、あいまいな結果が出ることがあります。 –

+0

別のバージョンで試すことはできますか? (私は遅い作家です) –

+0

残念ながら、私には他のバージョンはありません。 MySQLサーバ5.1.49-1ubuntu8.1 –

答えて

0

最初に、インデックス情報を見ることなく、私は染色体キーとtranscript_start(但し、染色体キーの最小値)のTSS_TData_Rangeにインデックスを持ちます。私はあなたのunique_nucleosome_reテーブルに染色体上のインデックスがあると仮定します。その後、私が、性能に興味があると思いTSSは、あなたのSHORTテーブルですので、私は、クエリの最初の位置にTHATを移動し、「STRAIGHT_JOIN」句の使用を呼び出します...

SELECT STRAIGHT_JOIN 
     n.name, 
     t.transcript_start, 
     n.start 
    FROM 
     tss_tdata_range t, 
     unique_nucleosome_re n 
    where 
      t.chromosome = 'X' 
     and t.chromosome = n.chromosome 
     and t.transcript_start > n.end 
     and t.ts_minus_250 < n.start 
    order by 
     t.transcript_start 

表示されますもしあなたがうまくいくのであれば...

+0

インデックスに関しては、あなたは正しいです。両方の表の染色体とWHEREの他のキーは索引付けされています。私はそれを試し、あなたに知らせるでしょう。 :) –

+0

Hmmm ,,,最初の1つは17秒かかり、2つ目は両方とも10秒に制限されて37秒かかりました。キャッシュをなくすためにプロファイリングする前にサーバーを再起動しました。 –

+0

@microbeサーバのリフレッシュとキャッシュについての良い点がありますが、まだまだあなたと一貫していると思います...喜んで助けてください... STRAIGHT_JOINがあなたにできることを理解していない人がいます。あなたのデータと関係を知ってください... – DRapp

関連する問題