[討論] 資料表Join的效能差異

看板Database作者 (____高手)時間10年前 (2014/05/28 15:45), 10年前編輯推噓2(206)
留言8則, 4人參與, 最新討論串1/1
各位大大好: 假設2個資料表A和資料表B的資料量都很大(就假設都100萬筆好了) 那在做Join的時候一定會非常耗時和耗資源 一般我們在下查詢時普遍都會這樣寫 SELECT A.name B.salary FROM A LEFT JOIN B on A.id = B.id WHERE A.age >='20'; 那如果先將A資料表查詢完成 SELECT name, id FROM A WHERE age >= '20'; 再以程式迴圈方式查詢B資料表(假設A資料表查詢完有20筆,那B資料表就要查詢20次) SELECT salary FROM B WHERE id='A.id'; //A.id是上面A資料表查詢出來的欄位資料 最後再把2個資料合併起來(這裡有點偏程式端了) 效能會比較快嗎? 在此先感謝各位!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.223.105 ※ 文章網址: http://www.ptt.cc/bbs/Database/M.1401263152.A.530.html

05/30 19:44, , 1F
善用索引,資料庫沒那麼差。
05/30 19:44, 1F
我的資料庫中有設索引呢,不過還是慢慢的...也有可能是Server不太給力啦

05/31 15:29, , 2F
基本上資料庫系統也像是你這麼做,先過濾再join
05/31 15:29, 2F

05/31 15:29, , 3F
你可以用explain先看看他怎麼做query得
05/31 15:29, 3F
okay!我等等就試看看!

05/31 22:42, , 4F
yeah 可運用temp table
05/31 22:42, 4F
Temp table好像要進網頁後才執行,我的首頁也是因為Query很慢所以第一次會等很久... 所以才在找看看有沒有方法提高Query的效能 ※ 編輯: Prestense (220.133.223.105), 06/03/2014 10:37:50

06/05 01:21, , 5F
temp table 也可以想成 資料異動不大的話 乾脆就批次算
06/05 01:21, 5F

06/05 01:28, , 6F
重點是 為什麼會耗時跟耗資源? 資料庫是怎麼進行的?
06/05 01:28, 6F

06/05 01:30, , 7F
想想看 . 執行計畫, join演算法,暫存空間, 資料集大小...
06/05 01:30, 7F

06/05 01:30, , 8F
看看可能的瓶頸在什麼地方
06/05 01:30, 8F
文章代碼(AID): #1JXPGmKm (Database)