我必须开发一个电影的网络应用程序。 现在,在我的数据库中,我有一个关于数字和电影之间关系的表格,另一个关于演员(也是数字)和电影之间关系的表格。 最后一个还包含有关角色的信息。
我的问题根本不是关于规范化,我想知道在速度方面是否更有效率为每个表执行两个查询或将它们合并到一个具有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
;
';
答案 0 :(得分:1)
取决于查询。 LEFT JOIN在MySQL中是正常的。使用适当的索引进行单个查询。除非必要,否则不要优化它(打破较小的查询)
答案 1 :(得分:1)
我强烈怀疑单一查询方法会更快。
当你不使用存储过程但是从像PHP这样的脚本解释器或者允许你与MySQL接口的任何其他进程一个接一个地执行这两个查询时,我更强烈地怀疑它会更快
如果您想为您的案例提供可靠的答案,那么答案非常简单:
使用实际数据对您的特定方案执行测试并比较性能。 (这称为“基准测试”。)