【发布时间】:2012-12-30 01:58:11
【问题描述】:
从按以下方式设置的两个表中获取数据的最有效方法是什么:
表 1:
ID(PK) | Name | Age
--------------------------
1 | Jim | 44
2 | Jane | 35
3 | John | 22
表 2
Name(PK) | Pet(PK)
-----------------
Jim | Cat
Jim | Dog
Jane | Fish
表 2 中的 FK 对“名称”有限制
结果
我想要特定人的年龄和所有宠物。
Name | Age | Pet
---------------------
Jim | 44 | Cat
Jim | 44 | Dog
在我看来,这些是我的选择:
1) 在 Name 上左连接表 2,最终在我的 Name 和 Age 数组中出现冗余数据(如上)。
2) 使用将宠物转换为逗号分隔列表的函数。
3) 使用 2 个单独的选择。
我的问题与上述 3 个选项的性能有关。我不需要 SQL(特别是,除非你想建议另一种方法)。
谢谢!
【问题讨论】:
-
您的问题与性能无关。选择你更喜欢的(想必是第一个)
-
什么存储引擎?它甚至是 MySQL 吗?服务器在哪里? PHP服务器在哪里?多少内存/硬盘空间/等?两者之间的带宽是多少?如果是同一台服务器,上面还有什么?有多少行?还有多少张桌子?数据访问频率如何? ......效率不仅仅是 SQL 查询......你必须给我们更多的继续。您的 PHP 代码可能比 SQL 查询更需要性能调整
-
感谢您的回复。那么它们在 SQL 方面都同样有效吗? @cegfault MySQL / MyISAM。在表 1 和表 2 中选择了大约 40 多个附加字段。通常为 T1 返回 30 行,对于 T2,每个查询最多返回 150 行。大约 10 个用户每 5 秒左右同时查询一次,随着时间的推移而增加。谢谢。