作者nakahusa (NA)
看板PHP
标题[请益] MySQL SELECT 大量不规则条件
时间Mon Aug 10 18:57:16 2015
假设 table 里有 1000 万笔资料,每笔资料都有 uniqid,
uniqid 皆为不规则,例如:
uniqid data
-------- --------
abcdefgh data_1
acegbdfh data_2
adgbehcf data_3
aebfcgdh data_4
…
afbgchde data_1000万
现在手边有 100 个 uniqid,需要从该 table 取出资料,
请问 SQL 该怎麽下最妥当呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 125.227.26.181
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1439204239.A.741.html
1F:→ MOONRAKER: (1)开temp table (2)加入所有uniqid (3)join 08/10 19:04
2F:→ nakahusa: 请问除了MOON大的方法还有其他的方式吗? 因为 db 帐 08/10 19:30
3F:→ nakahusa: 号没有 create 的权限… = = 08/10 19:30
※ 编辑: nakahusa (125.227.26.181), 08/10/2015 19:31:53
4F:→ sextitanic: 组好要查的内容,where uniqid in (val_1,val_2,...) 08/10 22:41
5F:→ DarkKiller: 推 sextitanic 给的方法 08/11 00:15
6F:→ nakahusa: 感谢大家,大概有个底罗 08/11 10:25
7F:→ MOONRAKER: in (...) 最直接 temp table据称较快 但可能是个迷信 08/11 10:32
8F:推 tas72732002: 1000万笔又搭配in想必效率不佳 ~ 08/11 11:24
9F:→ MOONRAKER: 看做什麽用 如果batch就随便他 08/11 11:28
10F:→ nakahusa: 如果改 OR 会好点吗 XDDD 08/11 13:33
11F:→ nakahusa: WHERE uniqid=val_1 OR uniqid=val_2 … 08/11 13:33
13F:→ MOONRAKER: 一说现在参数很多的IN在内部会自动转用temp table处理 08/11 16:08
14F:→ MOONRAKER: (也许可以试拼一个stmt然後用explain看看) 08/11 17:09
15F:→ nakahusa: 啧啧… OR 也输太多 XDDD MOON大有心了! 感恩 08/11 17:40
16F:→ MOONRAKER: IN一直是巨大的迷惑啊 以前每次提到IN 公司的老SA就会 08/12 10:18
17F:→ MOONRAKER: 露出像便秘的表情说不要写IN那样很慢 一直很想充康他 08/12 10:20
18F:推 tas72732002: IN 跟 OR 是差不多意思的, 效能都不好 08/12 11:58
19F:→ MOONRAKER: 最好是写一百万个select会比较好 08/12 14:48
20F:推 locklose: In 会好一点,Or资源没有重复利用的可能 08/14 17:02