1
orzorzorzorz 2019-12-21 11:03:13 +08:00
建张临时表,把 id 插进去查完丢?
|
2
w292614191 2019-12-21 11:28:46 +08:00
@orzorzorzorz 限制了参数个数啊,插到临时表 ???
|
3
arthas2234 2019-12-21 11:34:29 +08:00
@w292614191 #2 关联查询
|
4
w292614191 2019-12-21 11:36:17 +08:00
|
5
yuanchao 2019-12-21 11:45:11 +08:00 1
看具体场景,如果读比写多,那么考虑预热到缓存,批量查询的时候直接从缓存取
|
6
sazima 2019-12-21 12:10:28 +08:00
select * from table where id in (....2000) or id in (.......) or id in (...)
|
7
sazima 2019-12-21 12:11:44 +08:00
随便想的, 没试过
|
8
eason1874 2019-12-21 12:11:59 +08:00
要么调大 SQL 限制,要么分批查询。
没有更好的方法,除非 ID 连续,那可以用比较条件。 |
9
QUIOA 2019-12-21 12:34:15 +08:00 via Android
你看看那些玩社工库的,,70E5 秒
|
11
love 2019-12-21 13:52:31 +08:00 via Android 2
你这个按 ID 分批来本身就是标准做法
|
12
uyhyygyug1234 2019-12-21 14:00:18 +08:00
|
13
ryuzaki113 2019-12-21 14:15:30 +08:00
根据 ID 来的话 不如 union all ?
|
14
h123123h 2019-12-21 14:17:45 +08:00
为什么不用缓存~
|
15
jugelizi 2019-12-21 14:21:49 +08:00 1
实时性要求不高进缓存了 sql 亚历山大
|
16
silentstorm 2019-12-21 14:42:48 +08:00 via Android
@w292614191
不一样的,多次查询大部分时间都消耗在数据库连接上面了 |
18
jie170601 OP |
20
forgottencoast 2019-12-21 17:45:16 +08:00
你这个 id 从哪里来的呀?
临时表可以用表变量来代替。 |
21
orzorzorzorz 2019-12-21 18:00:05 +08:00
可以一次 insert 批量数据的:
```sql insert into table (id, column1) values (1, 'test1'), (2, 'test2'); ``` 这样一个连接就够了。 |
22
PopRain 2019-12-21 20:39:35 +08:00
@jie170601 join 的循环是数据库内部的操作,速度很快,你循环查询就要做网络发送-语句解析-执行计划分析(缓存)-查询数据-网络返回,整个过程很慢很慢(尤其是前后的网络通讯)
|
23
Eann248 2019-12-22 17:12:32 +08:00
@orzorzorzorz insert 长度限制与 select 是一样的
|
24
bjking2014 2019-12-25 14:09:06 +08:00 1
如果 in 参数只能放 2k 个,比如传了 5k 个参数,我的思路是
select .....in(n1,n2000) union all select .....in(n2001,n4000) union all select .....in(n4001,n5000) |