针对1对*关系的MySQL优化

时间:2014-01-25 05:36:00

标签: php mysql sql subquery

好的,我一直试图解决这个问题但未能得出结论。我希望从你们那里得到一些结果,做一些更多测试的技巧,或者更多的资源来阅读。

情况很简单。有一张主要的图片表。可能是cat_pictures。有一个cat_pictures_comments的辅助表。一些聪明的开发人员确保cat_pictures的自动递增主键为ID_PICTURE,而评论也会以ID_PICTURE的索引存储。

我们的应用程序有一个页面,想要显示所有图片的所有图片评论。

我们

  1. 只需INNER JOIN cat_pictures cat_pictures_comments(并确保订单正确无误)

  2. 获取所有cat_pictures,然后循环浏览每个cat_pictures_comments以获取每张图片

  3. 答:如果应用程序是PHP会怎么样?

    B:如果cat_pictures有猫的基因组的条目ID,图片文件路径和另外20,285个字段怎么办?每个猫的主人的精神病医生(1-1关系)cat_picturesINNER JOIN。 (基本上,与我们的小型pissant评论表相比,主表上附加了更多数据。)

    谢谢大家。

1 个答案:

答案 0 :(得分:1)

我认为你的问题是,你是否加入了评论,然后有一个看起来像

的查询

选项1

select (all pic columns), (all comment columns) from pics inner join comments; 

Vs以上。备选方案2

Select * from pics; then loop and select * from comments were pictureId = @currentId;

Vs以上。备选方案3

Select * from pics order by picId; select * from comments order by picId;

在选项1中,您为每张为该图片发布的评论重复了图片表的每一列。如果每张图片有很多注释且图片表非常宽,那么最好从数据库中提取两个独立的数据集。

在选项2中,如果有很多图片,您将进行太多的数据库往返。

基于缺乏完整的要求,我建议选项3.获取图片表结果和注释作为两个单独的数据集,然后在您的php页面:循环每个图片并显示图片信息,然后嵌套循环获取已从SQL Server中提取的注释的本地数据集中的当前图片的注释。