看板 Database 關於我們 聯絡資訊
※ 引述《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