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...