0

映画用の Web アプリケーションを開発する必要があります。今のところ、私のデータベースには、フィギュアと映画の関係を表すテーブルと、俳優 (これもフィギュア) と映画の関係を表すテーブルがあります。最後のものには、キャラクターに関する情報も含まれています。

私の質問は正規化に関するものではありません。テーブルごとに2つのクエリを実行するか、いくつかのタプルの文字にNULL値を持つ単一のクエリにマージして単一のクエリを実行する方が速度の点で効率的かどうかを知りたいですクエリ?

編集:

今のところ 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
        ;
    ';
4

2 に答える 2

1

クエリによって異なります。LEFT JOIN は、MySQL では通常のことです。適切なインデックスを使用して単一のクエリを作成します。必要でない限り、最適化しないでください (より小さなクエリに分割します)。

于 2011-07-16T09:27:06.790 に答える
1

単一クエリのアプローチの方が高速であると強く思います。

ストアド プロシージャを使用せずに、PHP などのスクリプト インタープリターまたは MySQL とのインターフェイスを可能にするその他のプロセスから 2 つのクエリを次々に実行すると、より高速になるとさらに強く思います。

あなたのケースに対して信頼できる答えが必要な場合は、非常に簡単な答えがあります。

実際のデータを使用して特定のシナリオのテストを実行し、パフォーマンスを比較します。(これを「ベンチマーク」と呼びます。)

于 2011-07-16T09:31:09.510 に答える