【发布时间】:2014-01-25 05:36:00
【问题描述】:
好的,我一直在尝试解决这个问题,但无法得出结论。我很想从你们那里得到一些结果、进行更多测试的提示或阅读更多资源。
情况很简单。有一个主要的图片表。可能是cat_pictures。有一个二级表cat_pictures_comments。一些聪明的开发者确保cat_pictures有一个自动递增的主键ID_PICTURE,并且cmets也以ID_PICTURE的索引存储。
我们的应用程序有一个页面想要显示所有图片以及每张图片的所有评论。
我们
只需
INNER JOINcat_pictures和cat_pictures_comments(并确保正确订购)获取所有
cat_pictures,然后遍历每个并为每张图片获取cat_pictures_comments
A:如果应用程序是 PHP 怎么办?
B:如果cat_pictures 有猫基因组的条目 ID、图片文件路径和另外 20,285 个字段怎么办? cat_pictures 还与每只猫的主人的精神科医生进行了 INNER JOIN 教育(一对一的关系)。 (基本上,与我们的小型 cmets 表相比,附加到主表的数据要多得多。)
谢谢大家。
【问题讨论】:
-
问题不清楚。答案是加入。考虑为 1-1 数据提供附件表,但前提是它可以证明存在显着的性能优势。如有疑问,请进行测试。
-
对不起。这就是我要说的,我不确定如何衡量使用 PHP 获取每张图片 cmet 或使用查询获取它的好处。我觉得 PHP 可能会更好,因为存储和返回重复的
cat_pictures数据的内存可能远远超过附加到图片的每个评论的小尺寸。 -
虽然可能,但在实践中,这种假设极不可能。通常,到 DB 的“往返”次数越少越好 - “1”是最佳选择。
-
为了使这个问题有用,有什么提示可以正确地对“断言”进行基准测试?我们应该看到时间和/或内存得到改善吗?还要考虑 PHP 中的缓存和优化以及 MySQL 中的缓存和内存...还考虑到超动态租户系统
-
制作几百万行(和索引)表非常简单,然后看看你得到了什么。除此之外,其他人可以这么说,因为基准测试和优化并不是我真正的地盘。