2017-02-16 10 views
0

私はSQLの専門家ではありません。私は、次のクエリを最適化する必要があります。SQLクエリの最適化 - 結合の追加など

SELECT trn.runner_id, 
    tr.race_id, 
    trr.position, 
    trr.program_number, 
    trn.horse_name, 
    trc.track_id, 
    tr.race_number, 
    trc.ticket_name, 
    trc.race_card_id, 
    trn.couple_type, 
    tt.country, 
    tr.post_time, 
    tr.sp_fav 
FROM tb_race_results trr, 
    tb_races tr, 
    tb_race_runners trn, 
    tb_race_card trc, 
    tb_tracks tt 
WHERE trr.race_id=514729 
     AND tr.race_id=trr.race_id 
     AND tr.race_card_id=trc.race_card_id 
     AND trr.program_number=trn.program_number 
     AND trn.race_id=trr.race_id 
     AND tt.track_id=trc.track_id 
ORDER BY trr.position 

(〜1秒)私は必要なインデックスを追加しましたが、クエリがひどく実行します。

+0

スキーマを追加し、そうでない場合、我々はあなたのデータの見当がつかないでしょう。 –

+0

どのDBMSを使用していますか? –

+3

今日のヒント:現代的で明示的な 'JOIN'構文に切り替えます。書き込みが簡単(エラーなし)、読みやすく保守が容易、必要に応じて外部結合に変換する方が簡単です。 – jarlh

答えて

2

SELECT trn.runner_id, 
 
    tr.race_id, 
 
    trr.position, 
 
    trr.program_number, 
 
    trn.horse_name, 
 
    trc.track_id, 
 
    tr.race_number, 
 
    trc.ticket_name, 
 
    trc.race_card_id, 
 
    trn.couple_type, 
 
    tt.country, 
 
    tr.post_time, 
 
    tr.sp_fav 
 
FROM tb_race_results trr 
 
INNER JOIN tb_races tr ON tr.race_id=trr.race_id 
 
INNER JOIN tb_race_runners trn On trn.race_id=trr.race_id On trr.program_number=trn.program_number 
 
INNER JOIN tb_race_card trc On tr.race_card_id=trc.race_card_id 
 
INNER JOIN tb_tracks tt  On tt.track_id=trc.track_id 
 

 
WHERE trr.race_id=514729