2011-07-16 7 views
0

ムービー用のWebアプリケーションを開発する必要があります。 今のところ、私のデータベースには、フィギュアとムービーの関係のテーブルと、アクター(数字でもある)とムービーの関係のテーブルがあります。 最後の文字には文字に関する情報も含まれています。データベース速度の最適化(複数のクエリ)

私の質問では、正規化についてではなく、各テーブルに対して2つのクエリを実行するか、いくつかのタプルで文字のNULL値を持つ単一のテーブルにマージする方が効率的かどうかを知りたいと思います単一のクエリを実行しますか?

EDIT:今の

2つのクエリ(図側、彼の演技とキャリアを得るために):

$query1 = ' 
     SELECT RelationFigureCardType.department, RelationFigureCardType.job, Movie.card_type_id, Movie.id, Movie.original_name, Movie.release_date, Movie.cover, Movie.cover_ext 
     FROM relation_figure_cards AS RelationFigureCard 
      RIGHT JOIN relation_figure_card_types AS RelationFigureCardType ON 
       (RelationFigureCard.relation_figure_card_type_id = RelationFigureCardType.id) 
      RIGHT JOIN cards AS Movie ON 
       (RelationFigureCard.card_id = Movie.id) 
     WHERE 
      RelationFigureCard.figure_card_id = '.$figureId.' 
      AND RelationFigureCard.last_card_version = 1 
     ORDER BY Movie.card_type_id, RelationFigureCardType.priority, Movie.release_date 
     ; 
    '; 

$query2 = ' 
     SELECT RelationActorCard.is_main, RelationActorCard.is_guest, Movie.card_type_id, Movie.id, Movie.original_name, Movie.release_date, Movie.cover, Movie.cover_ext, Character.id, Character.original_name, Character.cover, Character.cover_ext 
     FROM relation_actor_cards AS RelationActorCard 
      RIGHT JOIN cards AS `Character` ON 
       (RelationActorCard.character_card_id = Character.id) 
      RIGHT JOIN cards AS Movie ON 
       (RelationActorCard.card_id = Movie.id) 
     WHERE 
      RelationActorCard.figure_card_id = '.$figureId.' 
      AND RelationActorCard.last_card_version = 1 
     ORDER BY Movie.card_type_id, Movie.release_date 
     ; 
    '; 

答えて

1

私は、単一クエリのアプローチがより高速であると強く思っています。

ストアドプロシージャを使用せず、PHPのようなスクリプトインタプリタや他のプロセスとのインターフェイスをとることができる2つのクエリを順番に実行すると、 MySQL。

は、実際のデータを使用して、特定のシナリオのためのテストを実行し、パフォーマンスを比較:あなたがあなたのケースのための信頼できる答えをしたい場合は

は、非常に単純な答えがあります。 (これは「ベンチマーク」と呼ばれます)

+0

私はあなたの最後の文で少し風刺を疑う:)、しかしあなたは正しい。 これを行うには十分なデータがありません。 –

+0

@Sébastien - まあ、ベンチマークの内容がわからない時があったことを覚えています。どうしてそれを説明してみませんか?ここで意図された嫌悪感はない... – Lumi

1

は、クエリに依存します。 LEFT JOINはMySQLで普通のことです。適切なインデックスを持つ単一のクエリを作成します。必要がない限り、最適化しないでください(小規模なクエリに分解する)

+0

私はJOINを行う必要はありません。必要なムービーIDを持つタプルを単純に選択するだけです。 2つの可能性があります.2つのテーブルに対する2回のクエリ(それぞれに少ないデータ)またはすべてのデータを含む大きなテーブルで1回。 –

+0

または、2つのクエリのUNIONを使用できますか?とにかく、正確なクエリがなければ、それは答えにくいです –

+0

これは、私は2つのクエリで私のポストを更新しました。 –

関連する問題