
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 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 批量查回来组装一下。 |