用户列表中的每个人的数据库查询是否过多?

时间:2011-06-25 23:02:57

标签: php mysql database optimization

我目前正在使用MySQL和MyISAM。

我的函数在我的应用程序中返回一般朋友或用户的用户ID数组,当显示它们时,foreach似乎最好。

现在我的问题是我只有ID,所以我需要嵌套数据库调用,以根据循环中的用户ID获取每个用户的其他信息(即名称,头像,其他字段)。

我不指望成千上万的用户(主要是为了爱好学习),虽然我该如何做到这一点,例如将代码放在foreach中进行显示的灵活性,但不依赖于ID数组,所以我出去了好运使用单个查询?

关于我可以适当显示列表的任何一般结构或提示?

我的查询量(列表中每个用户1:1)是否不合适? (虽然用户的页面0..n,一次10个让我觉得它没那么糟糕。)

3 个答案:

答案 0 :(得分:4)

您可以使用IN()MySQL方法,即

SELECT username,email,etc FROM user_table WHERE userid IN (1,15,36,105)

这将返回userid与这些ID匹配的所有行。你添加的ID越多,效率越低,但你提到的10左右应该没问题。

答案 1 :(得分:1)

为什么你不能只使用左连接来获取1次拍摄的所有数据?听起来你得到一个列表,但是你只需要获得所有单个用户的信息。是吗?

记住数据库是关于结果SETS的,一般情况下,如果需要,你只能返回一行,你几乎不需要获得一行,然后返回获取更多信息。

例如,朋友列表可能会保存在用户条目的文本列中。

答案 2 :(得分:1)

无论您希望拥有小型数据库还是大型数据库,我都会考虑使用InnoDB引擎而不是MyISAM。它的处理开销比MyISAM高一些,但是你可以获得所有额外的好处(随着你的爱好增长),包括JOIN,这将允许你从多个表中提取特定数据:

SELECT u.`id`, p.`name`, p.`avatar`
  FROM `Users` AS u
  LEFT JOIN `Profiles` AS p USING `id`

将返回来自用户的ID以及来自个人资料的名称和头像(两个表的ID匹配)

网上有很多关于数据库规范化的资源,您可能会喜欢:http://www.devshed.com/c/a/MySQL/An-Introduction-to-Database-Normalization/