name 和 age 才能唯一标识 People 中的一条数据。 这种批量查询怎么实现性能比较好?代码或者 SQL 什么都可以。
1
zxlzy 2021-11-18 20:28:29 +08:00
SELECT * FROM people WHERE (name = 'a' AND age = 1) OR (name='b' AND age=2) OR ...
|
2
imshawer 2021-11-18 21:07:33 +08:00
要性能就要索引,要索引可以用复合主键。
|
3
RuLaiFo 2021-11-19 00:40:07 +08:00
加 name 和 age 组成的唯一索引
|
4
EmiliatanTenshi 2021-11-19 08:52:19 +08:00
最好的姿势是搞个 userId ,全域统一使用 userId 避免这种蛋疼的问题
|
5
lidlesseye11 2021-11-19 09:28:36 +08:00
语言我就猜是 Java 吧,用的是啥 DB 你好歹说一下啊😅
|
6
c6h6benzene 2021-11-19 10:13:21 +08:00 via iPhone
|
7
cyrivlclth 2021-11-19 11:06:57 +08:00
一楼的用 in 应该也能查出来
|
8
pierswu 2021-11-19 11:11:39 +08:00 1
mysql
SELECT * FROM people WHERE (name, age) in (('a',1),('b',2)...) |
9
taofoo 2021-11-19 11:19:33 +08:00
感觉年龄区分度不大,如果 name 区分度比较大的话,可以直接拿名字然后代码判 age 过滤
|
10
calmzhu 2021-11-19 12:32:14 +08:00
不同数据量不同数据特征的解决方案不一样的。
盲猜数据量不爆炸,age 索引拿数据,然后代码过滤 name 试试。 |
11
shadow1949 OP @zxlzy 这样 or 查询,如果数据很多,应该会比较慢吧?
|
12
shadow1949 OP @lidlesseye11 语言是 Java ,DB 用得 MongoDB
|
13
shadow1949 OP @c6h6benzene User 是没有表的
|
14
shadow1949 OP |
15
zgc27wo 2021-11-19 14:51:58 +08:00
要不这样?
1. 先数据库获取所有的<People> name,age,id 的组合 2. 基于 name-age 分组的[分组 A] 3. 然后匹配自己<User>的 name 和 age 获取 name-age 去[分组 A]找到对应的 Id 集合 4. 再去数据库通过 id 集合查找对应的<People> 相当于给 name,age,id 打了联合索引 |
16
br00k 2021-11-19 15:30:18 +08:00
MongoDB 可以把 name 和 age 冗余到 People 表就好了。如果只是分页用,把 userId 冗余到 People 批量查回来组装一下。
|