[SQL] MySQL 如何有效率的從兩個伺服器篩選大量

看板Database (資料庫)作者 (咩~~)時間6年前 (2018/09/08 12:34), 編輯推噓0(003)
留言3則, 2人參與, 6年前最新討論串1/2 (看更多)
大家好,我是一個sql學齡3個月的新手,最近因為工作需求 需要從兩個mysql伺服器撈取資料來計算報表,目前因為趕 時間,先用了簡單的語法做完,但日後資料量變更多應該會 變很慢,所以想跟大家請教比較有效率的方法。 1. DB架構 目前主要用到的DB分在兩台機器上,一台存log (玩家uid, 貨類型,貨幣增銷量,時間戳,etc)約有300萬筆資料、一台存 玩家資訊(玩家uid,創角時間,等級,最後上線,etc),約3萬筆資 料,常用的table都有建索引了。然後兩台DB跟正在開發的報 表後台都在同一個內網。 2. 需求與目前作法 目前我的需求是取出某時段內創角的玩家(有時會換成時段 內還有上線的玩家)的貨幣增銷統計。 而我目前因為時間有限,先用最簡單的方法做: (1)把目標uid撈出來 SELECT GROUP_CONCAT(QUOTE(playerdb.player.uid)) FROM playerDB.player WHERE created_at >= time1 AND created_at < time2 (2)把這串uid用c#串成sql指令到log DB撈資料 SELECT uid, currency_type, SUM(value) FROM logDB.log.currency_log WHRERE uid IN (一長串uid) AND currency_type = n GROUP BY uid 3. 我的問題 之前有過幾次經驗,當我用where not in 語法篩選資料時, 如果not in 裡面的條件太多就會跑很久,有時會久到被中斷 連線(但where in 還沒遇過,我也不太確定),所以有點 怕遊戲正式對外開放時我的查詢會崩潰。 之前問過DBA同事,他們說可以用inner join的話會比where 好,但資料分散在兩台機器上,我沒辦法直接做join。為了 join我還試過用transaction 在logDB開temporary table,用 Dapper(.NET一個評價頗高的ORM套件)把撈到的uid insert 到這個暫存表,但光insert 150多筆資料就花了7秒...所以只 好放棄。想請問各位前輩,在我這種狀況下,該如何提升我 的查詢效能,以應付將來更大的資料量?懇請各位指點,謝 謝!手機排版,如果有點凌亂請見諒。 ----- Sent from JPTT on my iPhone -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.196.69 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1536381279.A.B5D.html

09/08 13:13, 6年前 , 1F
Google MySQL federated engine 可像存取本地端的 tab
09/08 13:13, 1F

09/08 13:13, 6年前 , 2F
le 一樣存取遠端 table
09/08 13:13, 2F

09/08 14:03, 6年前 , 3F
原來還有這樣的方法啊,謝謝,我去google一下
09/08 14:03, 3F
文章代碼(AID): #1Rar5VjT (Database)
文章代碼(AID): #1Rar5VjT (Database)