5

批量查询,例如 List<User>的 name 和 age,去 DB 中查询出 List<People>...

 2 years ago
source link: https://www.v2ex.com/t/816381
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  数据库

批量查询,例如 List<User>的 name 和 age,去 DB 中查询出 List<People>,怎么处理这个?

  shadow1949 · 1 天前 · 1074 次点击

name 和 age 才能唯一标识 People 中的一条数据。 这种批量查询怎么实现性能比较好?代码或者 SQL 什么都可以。

16 条回复    2021-11-19 15:30:18 +08:00

zxlzy

zxlzy   1 天前

SELECT * FROM people WHERE (name = 'a' AND age = 1) OR (name='b' AND age=2) OR ...

imshawer

imshawer   1 天前

要性能就要索引,要索引可以用复合主键。

RuLaiFo

RuLaiFo   21 小时 23 分钟前

加 name 和 age 组成的唯一索引

EmiliatanTenshi

EmiliatanTenshi   13 小时 11 分钟前

最好的姿势是搞个 userId ,全域统一使用 userId 避免这种蛋疼的问题

lidlesseye11

lidlesseye11   12 小时 35 分钟前

语言我就猜是 Java 吧,用的是啥 DB 你好歹说一下啊😅

c6h6benzene

c6h6benzene   11 小时 50 分钟前 via iPhone

而且你的 User 有没有表…有的话 select from people p left join user u on p.name=u.name and p.age = u.age. 逐条的话就是 1 楼老哥的那种写法。Hibernate 之类我记得好像可以 FindByNameAndByAge ?

cyrivlclth

cyrivlclth   10 小时 56 分钟前

一楼的用 in 应该也能查出来

pierswu

pierswu   10 小时 51 分钟前   ❤️ 1

mysql
SELECT * FROM people WHERE (name, age) in (('a',1),('b',2)...)

taofoo

taofoo   10 小时 44 分钟前

感觉年龄区分度不大,如果 name 区分度比较大的话,可以直接拿名字然后代码判 age 过滤

calmzhu

calmzhu   9 小时 31 分钟前

不同数据量不同数据特征的解决方案不一样的。

盲猜数据量不爆炸,age 索引拿数据,然后代码过滤 name 试试。

shadow1949

shadow1949   9 小时前

@zxlzy 这样 or 查询,如果数据很多,应该会比较慢吧?

shadow1949

shadow1949   8 小时 59 分钟前

@lidlesseye11 语言是 Java ,DB 用得 MongoDB

shadow1949

shadow1949   8 小时 57 分钟前

@calmzhu
@taofoo

数据量会比较大,而且如果再多个条件,例如 name,age,country ,还得再过滤。

zgc27wo

zgc27wo   7 小时 11 分钟前

要不这样?
1. 先数据库获取所有的<People> name,age,id 的组合
2. 基于 name-age 分组的[分组 A]
3. 然后匹配自己<User>的 name 和 age 获取 name-age 去[分组 A]找到对应的 Id 集合
4. 再去数据库通过 id 集合查找对应的<People>

相当于给 name,age,id 打了联合索引

br00k

br00k   6 小时 33 分钟前

MongoDB 可以把 name 和 age 冗余到 People 表就好了。如果只是分页用,把 userId 冗余到 People 批量查回来组装一下。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK