業務問題大概可以這樣描述,乙個父表,乙個子表,查詢的結果是找到子表中沒有使用父表id的記錄,這種情況估計很多系統都會牽涉得到。讓我們來舉乙個例子:
表一: 父表 parent
表二: 子表 childen
父表儲存父親,子表儲存孩子,然後通過pid和父表關聯,查詢需要的結果是找到尚未有孩子的父親。
我們來看一下查詢語句的寫法:
select * from parent where id not in (select pid from childen)
這種標準的寫法在子表存在50萬條的記錄的時候,查詢時間超過了10秒,遠遠大於原來的sql server伺服器的一秒。我在解決的時候想到了乙個方法:
select * from parent where id in
( select id from parent minus select pid from childen )
正常理解下,這個語句應該更加費時,但是事實完全出乎意料,這條語句不僅僅在子表存在大量記錄的情況下速度良好,在子表少量資料的情況下速度也非常的好,基本在1秒內完成。
ORACLE in與exists的選擇
業務問題大概可以這樣描述,乙個父表,乙個子表,查詢的結果是找到子表中沒有使用父表id的記錄,這種情況估計很多系統都會牽涉得到。讓我們來舉乙個例子 表一 父表 parent 1 id varchar2 10 主鍵 2 name varchar2 100 名稱 表二 子表 childen 1 id va...
ORACLE in與exists語句的區別
業務問題大概可以這樣描述,乙個父表,乙個子表,查詢的結果是找到子表中沒有使用父表id的記錄,這種情況估計很多系統都會牽涉得到。讓我們來舉乙個例子 表一 父表 parent 表二 子表 childen 父表儲存父親,子表儲存孩子,然後通過pid和父表關聯,查詢需要的結果是找到尚未有孩子的父親。我們來看...
ORACLE in與exists語句的區別
一 例項 insert into his batch excel data select 3402 as batch id,t.excel name,t.op time,t.staff id,2 state,t.imp type,t.acc nbr,t.mkt comm code,t.no stat...