作者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/m.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