mysql-什么是更有效的(速度/内存):联接或多项选择

我有以下表格:

使用者

userId |名称

项目

itemId | userId |描述

我想要实现的目标:我想从数据库中读取所有用户及其项目(一个用户可以有多个项目).我希望将所有这些数据存储在以下结构中:

User {
id
name
array<Item>
}

项目在哪里

Item {
itemId
userId
description
}

我的第一个选择是从用户调用SELECT *,用用户部分填充一个数组,然后为每个用户从userId = wantedId的项目中执行SELECT *,并完成项目数组.

这种方法正确吗,还是应该为此使用联接?

我不想使用连接的原因是我有很多冗余数据:

userId1|name1|ItemId11|description11
userId1|name1|ItemId12|description12
userId1|name1|ItemId13|description13
userId1|name1|ItemId14|description14
userId2|name2|ItemId21|description21
userId2|name2|ItemId22|description22
userId2|name2|ItemId23|description23
userId2|name2|ItemId24|description24

冗余的意思是:userId1,name1和userId2,name2

我的理由合理吗?

稍后编辑:在谈论效率时,我增加了标题速度或记忆

解决方法:

您需要权衡网络往返传输中的在线和RAM中的字节数.网络延迟通常是一个更大的问题,因为内存便宜且网络变得越来越快.随着第一个结果集的大小增加,情况变得越来越糟-Google的价格为“(n+1) query problem”.

我更喜欢加入.不要使用SELECT *;在几乎所有情况下,这都是一个坏主意.您应该准确地拼出所需的列.

上一篇:为何django按错误字段分组?注释()


下一篇:在GAE上有DAL / ORM吗?