【问题标题】:SQL select / join performace (PHP, PDO)SQL 选择/连接性能 (PHP, PDO)
【发布时间】: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 秒左右同时查询一次,随着时间的推移而增加。谢谢。

标签: sql select join


【解决方案1】:
  select 
  tb01.name, tb01.age, tb02.pet
  from 
  table01 tb01
  left join table02 tb02 on tb02.name = tb01.name

【讨论】:

  • 为什么这是 OP 要求的最有效的?
猜你喜欢
  • 2013-11-01
  • 2014-03-18
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 2010-10-25
  • 2010-09-27
相关资源
最近更新 更多