作者grence (多想兩分鐘 = =")
看板Database
標題Re: 請問這樣查詢效率會差很多嗎?
時間Thu Nov 11 23:56:24 2010
※ 引述《drkkimo (花貓~ 努力研究 )》之銘言:
: 如果今天有一個select 查詢 其中有A、B、C三個table 作join
: join的條件 只是三table的鍵值參照對應 再加上各自欄位的一些條件篩選
: 這樣的情形 如果先把A和B join的結果 放到一個oracle的temporary table D中
: 再作C和D的join ,總共的查詢時間 會比直接下查詢快很多嗎???
: //=============================
: 因為今天有人和我說這樣會快很多 但感覺起來好像只有再次查詢時 可以省掉對
: A、B join的時間
: 請問有人平常有用這種作法 或聽說過這樣會比較有效率的嗎?? 謝謝
把 temp table想成快取吧
如果 A跟 B的資料夠多,就可以試試看用 temp table省下 join的時間
有時預存程序會重複的 join相同的 table做不同的處理,
用 temp table除了可以簡化程式,也可省下重複 join花費的時間
另外就是遇到錯誤的資料表設計…牽動太大不想動資料表結構的話,
也會考慮弄個 temp table,甚至對 temp table建 index…
建完 index再跑還比直接 join快上好幾倍,這算少數狀況吧,但有遇過。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.194.23.13
→ fantasyj:如果是你提的情況,其實應該用實體table,而不是temp.. 11/12 08:13
啊,應該是你說的這樣
但是程式設計師沒有開資料表的權限
DBA.....~_~
再想了一下…
相同的資料不就要存兩份?
修改要改兩次,刪除要刪兩次,一個不小心還不一致?
這個狀況有什麼好辦法嗎?
....trigger? 就我遇過的,mssql的 trigger是個不穩定的東西
view可能好一點,也可建 index…但沒實際用過
※ 編輯: grence 來自: 123.194.23.13 (11/12 20:09)
推 drkkimo:view不錯喔 很實用 但多個table構成的view可能無法作upda 11/12 20:28
推 drkkimo:te 或insert delete .. 11/12 21:32
→ fantasyj:oracle的Mview可以解決這個問題.. 11/12 22:10
就我以為的用途…VIEW只應該拿來 SELECT用?
※ 編輯: grence 來自: 123.194.23.13 (11/13 00:43)
推 drkkimo:view也可以拿來增刪修改 看情形 但考慮況狀較多 所以如果 11/13 09:48
→ drkkimo:使用時原則上只用來select也可以讓情形較簡化 11/13 10:56