看板 PHP 關於我們 聯絡資訊
假設 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://www.ptt.cc/bbs/PHP/M.1439204239.A.741.html
MOONRAKER: (1)開temp table (2)加入所有uniqid (3)join 08/10 19:04
nakahusa: 請問除了MOON大的方法還有其他的方式嗎? 因為 db 帳 08/10 19:30
nakahusa: 號沒有 create 的權限… = = 08/10 19:30
※ 編輯: nakahusa (125.227.26.181), 08/10/2015 19:31:53
sextitanic: 組好要查的內容,where uniqid in (val_1,val_2,...) 08/10 22:41
DarkKiller: 推 sextitanic 給的方法 08/11 00:15
nakahusa: 感謝大家,大概有個底囉 08/11 10:25
MOONRAKER: in (...) 最直接 temp table據稱較快 但可能是個迷信 08/11 10:32
tas72732002: 1000萬筆又搭配in想必效率不佳 ~ 08/11 11:24
MOONRAKER: 看做什麼用 如果batch就隨便他 08/11 11:28
nakahusa: 如果改 OR 會好點嗎 XDDD 08/11 13:33
nakahusa: WHERE uniqid=val_1 OR uniqid=val_2 … 08/11 13:33
MOONRAKER: 根據這邊的實驗,不會 http://goo.gl/8KKjuV 08/11 16:07
MOONRAKER: 一說現在參數很多的IN在內部會自動轉用temp table處理 08/11 16:08
MOONRAKER: (也許可以試拼一個stmt然後用explain看看) 08/11 17:09
nakahusa: 嘖嘖… OR 也輸太多 XDDD MOON大有心了! 感恩 08/11 17:40
MOONRAKER: IN一直是巨大的迷惑啊 以前每次提到IN 公司的老SA就會 08/12 10:18
MOONRAKER: 露出像便秘的表情說不要寫IN那樣很慢 一直很想充康他 08/12 10:20
tas72732002: IN 跟 OR 是差不多意思的, 效能都不好 08/12 11:58
MOONRAKER: 最好是寫一百萬個select會比較好 08/12 14:48
locklose: In 會好一點,Or資源沒有重複利用的可能 08/14 17:02