在MySQL中将多个项链接到单个项的最佳方法

时间:2009-07-28 18:24:36

标签: php mysql performance

我正在使用PHP和MySQL建立一个网站。最重要的是你可以注册,你可以在你的个人资料中添加对象。你可以只有一个配置文件,你可以有多个项目(理论上是无限的),每个项目可以有多个图片(理论上是无限的)。

我想知道如何在MySQL中最好地实现它。我已经对MySQL进行了非常基础的教育,因为我知道如何创建一个表,各种数据类型是什么,但外键之类的东西埋藏在我记忆的后面。我查了一下,但理解有点慢。

我可以简单地制作3张桌子:

  1. Users_name + User_ID
  2. Item_ID + User_ID
  3. Item_ID + Picture_ID
  4. 下行是对于每一个搜索操作,或配置文件视图甚至是项目视图,我都会查询最后两个表的全部内容,这看起来有点过分。

    有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您的架构实际上非常好。现在,您担心的是您要查询表格的全部内容。考虑到主键和外键的良好索引,这是非常不正确的!

select
    u.users_name,
    i.itemid
from
    users u
    inner join items i on
        u.user_id = i.user_id
where
    u.user_id = 1234

即使有数十万行,该行集也会很快返回!原因是因为查询将使用索引查找来查找usersuser_id所在的行。同样,一旦将其加入items表。因此,只需要两次非常快速的查找即可找到您正在寻找的所有项目,而且无需扫描表格。

SQL绝对是针对这些东西进行优化的。请充分利用它!

答案 1 :(得分:0)

假设任何一个项目只能与一个用户相关是否公平?如果是这样,您的解决方案是正确的应该使用一个表中列出的一个(用户)和另一个表中列出的许多(项目)定义一对多关系,但使用许多的id和一个id来识别。

因为通过执行此操作,您必须限制SQL必须搜索的行以查找与用户相关的项目,您的查询应该相对较快。

简而言之,你是对的。