關於oracle中的in和exists的效率問題

時間 2022-02-10 03:40:06

1樓:匿名使用者

單說in和exsist,in的效率較差。

原理是什麼我也不清楚,用資料庫的人都這麼說。

2樓:

一般來說exists處理起來比in要快很多,優化sql時一般都是建議將in改為exists,

從你所描述的情況來看:

and a.producttype in (select c.name from tr_ywlx c where c.

fenlei!='廣視通')---tr_ywlx資料相比之下很小很小,而且這個子查詢只是表本身資料的篩選

and exists(select 1 from tr_ywlx c where c.fenlei!='廣視通' and c.

name = a.producttype)---這裡是將tr_ywlx這個資料很小的表與100w筆資料的表關聯起來了,形成了一個笛卡爾積,它要將兩個表資料一對一進行比對,100w啊,肯定慢了

你給producttype做一個索引再試試

3樓:匿名使用者

你的這個sql實在是太複雜了,而且還用到了外連結,不知道為什麼要寫的這麼複雜,我以前用過exists,比in的效率要高出很多。

關於exists與in的區別:

exists檢查是否有結果,判斷是否有記錄,返回的是一個布林型(true/false)。

in是對結果值進行比較,判斷一個欄位是否存在於幾個值的範圍中,所以 exists 比 in 快。

主要區別是:

exists主要用於片面的,有滿足一個條件的即可,in主要用於具體的集合操作,有多少滿足條件.

exists是判斷是否存在這樣的記錄,

in是判斷某個欄位是否在指定的某個範圍內。

exists快一些吧 。

in適合內外表都很大的情況,exists適合外表結果集很小的情況。

關於oracle中建立簡單的儲存過程,求助

open out all for v sql,這個開啟遊標的寫法,你裡面沒定義遊標!v sql nvarchar2 2000 這個資料型別改為。v sql varchar2 2000 說的對,out all沒有定義遊標。sql,建立一個簡單的儲存過程 procgetjc 要求結果是求5 create...

Oracle資料庫中nextval和values代表什麼意思

可以通過在 sql 語句中使用 nextval 或 currval 運算子來訪問序列的值。必須用以 sequence.nextval 或 sequence.currval 格式駐留在同一個資料庫中的序列名稱 或同義詞 來限定 nextval 或 currval。表示式也可以用所有者名來限定序列,如 ...

Oracle中如何插入特殊字元 和 多種解決方案

震哥刷粉團 我們在sql plus下執行 sql show all命令時,可以發現一個引數 define hex 26 如下所示 concat hex 2e copycommit 0 copytypecheck on define hex 26 describe depth 1 linenum of...