0

我必须为电影开发一个网络应用程序。目前,在我的数据库中,我有一张用于人物和电影之间关系的表格,还有一张用于演员(也是人物)和电影之间关系的表格。最后一个还包含有关角色的信息。

我的问题根本不是规范化,我想知道在速度方面对每个表执行两个查询或将它们合并到一个具有 NULL 值的单个元组中的字符并执行单个查询是否更有效询问 ?

编辑:

目前的两个查询(图侧,获取他的演技和事业):

$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 交互的过程中一个接一个地执行两个查询时,它会更快。

如果您想为您的案例提供可靠的答案,有一个非常简单的答案:

使用真实数据对您的特定场景进行测试并比较性能。(这称为“基准测试”。)

于 2011-07-16T09:31:09.510 回答