青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

sql中exist與in 的區別

今天在網上查資料看sql中exist與in 的區別,發現眾說紛紜,有幾種說法:
1. exist效率比in高,凡是in都應該用exist替換
2. 外大內小用in,外小內大用exist
3. 外大內小用exist,外小內大用in
 
一時分辨不了哪個正確,于是動手檢驗.
 
數據庫: ORACLE 10G
客戶端: PlSqlDev 7.1
 
1. 外大內小的情況:
history.tb_stk_cap_chg 記錄數 > 100,000,000
history.tb_stk_cap_chg_test 記錄數 = 20
 
--使用in
select count(*)
  from history.tb_stk_cap_chg a
 where a.tradedate = '20060712'
   and a.br_serial_no in
       (select b.br_serial_no from history.tb_stk_cap_chg_test b)
   
1 row selected in 21.188 seconds
 
--使用exists
select count(*)
  from history.tb_stk_cap_chg a
 where a.tradedate = '20060712'
   and exists (select null
          from history.tb_stk_cap_chg_test b
         where a.br_serial_no = b.br_serial_no)
 
 1 row selected in 0.5 seconds
 
可以看出外大內小用in效率極低,用exists效率很高
 
2. 外小內大的情況:
history.tb_stk_cap_chg 記錄數 > 100,000,000
history.tb_stk_cap_chg_test 記錄數 = 1,000,000
 
--使用in
 select count(*)
  from history.tb_stk_cap_chg_test a
 where a.br_serial_no in
       (select b.br_serial_no from history.tb_stk_cap_chg b)

 1 row selected in 9.187 seconds
 
--使用exists
select count(*)
  from history.tb_stk_cap_chg_test a
 where exists (select null
          from history.tb_stk_cap_chg b
         where a.br_serial_no = b.br_serial_no)
 
  1 row selected in 10.359 seconds
 
 注: 當history.tb_stk_cap_chg_test 記錄數 < 1,000,000時得出的時間差別很小,不容易判斷
 
可以看出外小內大時使用in比exists效率更高
 
----------------------------------------------------------------------------------
在改變history.tb_stk_cap_chg_test記錄數(10-1,000,000)進行測試(>5次)得出的結論與上述結論符合,在此不一一列出
 
由此得出結論: exits適合內小外大的查詢,in適合內大外小的查詢
----------------------------------------------------------------------------------
 
附上一篇覺得正確的文章,歡迎探討:

in 和 exists也是很好區別的.

in 是一個集合運算符.

a in {a,c,d,s,d....}

這個運算中,前面是一個元素,后面是一個集合,集合中的元素類型是和前面的元素一樣的.

而exists是一個存在判斷,如果后面的查詢中有結果,則exists為真,否則為假.

in 運算用在語句中,它后面帶的select 一定是選一個字段,而不是select *.

比如說你要判斷某班是否存在一個名為"小明"的學生,你可以用in 運算:

"小明" in (select sname from student)

這樣(select sname from student) 返回的是一個全班姓名的集合,in用于判斷"小明"是否為此集合中的一個數據;

同時,你也可以用exists語句:

exists (select * from student where sname="小明")

這兩個涵數是差不多的, 但是由于優化方案的不同, 通常NOT EXISTS要比NOT IN 要快, 因為NOT EXISTS可以使用結合算法而NOT IN 就不行了,而EXISTS則不如IN快, 因為這時候IN可能更多的使用結合算法.

select * from 表A where exists(select * from 表B where 表B.id=表A.id)

這句相當于

select * from 表A where id in (select id from 表B)


對于表A的每一條數據,都執行select * from 表B where 表B.id=表A.id的存在性判斷,如果表B中存在表A當前行相同的id,則exists為真,該行顯示,否則不顯示

exits適合內小外大的查詢,in適合內大外小的查詢

IN
確定給定的值是否與子查詢或列表中的值相匹配。

EXISTS
指定一個子查詢,檢測行的存在。

比較使用 EXISTS 和 IN 的查詢

這個例子比較了兩個語義類似的查詢。第一個查詢使用 EXISTS 而第二個查詢使用 IN。注意兩個查詢返回相同的信息。

USE pubs
GO
SELECT DISTINCT pub_name
FROM publishers
WHERE EXISTS
(SELECT *
FROM titles
WHERE pub_id = publishers.pub_id
AND type = 'business')
GO

-- Or, using the IN clause:

USE pubs
GO
SELECT distinct pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type = 'business')
GO

下面是任一查詢的結果集:

pub_name
----------------------------------------
Algodata Infosystems
New Moon Books

(2 row(s) affected)

exits 相當于存在量詞:表示集合存在,也就是集合不為空只作用一個集合.例如 exist P 表示P不空時為真; not exist P表示p為空時 為真 in表示一個標量和一元關系的關系。例如:s in P表示當s與P中的某個值相等時 為真; s not in P 表示s與P中的每一個值都不相等時 為真

posted on 2009-09-17 21:26 大龍 閱讀(254) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线亚洲+欧美+日本专区| 亚洲在线免费观看| 欧美午夜精品久久久| 欧美日韩国产黄| 欧美日韩亚洲网| 国产精品成人va在线观看| 国产精品亚洲人在线观看| 国产精品午夜久久| 黄色av日韩| 99精品视频免费| 亚洲欧美日本在线| 久久免费视频在线| 亚洲欧洲美洲综合色网| 亚洲精品三级| 亚洲淫性视频| 老司机精品视频网站| 欧美日韩久久不卡| 国产一区二区三区久久精品| 亚洲电影免费在线| 亚洲性视频网站| 免费成人av在线看| 日韩亚洲欧美成人| 亚洲国产一区二区三区a毛片 | 在线观看一区欧美| 亚洲一区二区免费在线| 欧美国产精品日韩| 久久综合九色欧美综合狠狠| 国产精品入口夜色视频大尺度| 在线观看一区二区精品视频| 亚洲在线观看免费视频| 欧美xart系列高清| 久久av资源网站| 国产欧美一区二区精品性| 一区二区三区日韩| 亚洲资源av| 亚洲第一在线| 亚洲高清在线观看一区| 一区二区三区黄色| 久久福利毛片| 亚洲国内精品| 欧美制服丝袜第一页| 欧美三级午夜理伦三级中文幕| 精品av久久707| 亚欧美中日韩视频| 日韩亚洲视频在线| 欧美成人精品h版在线观看| 国产一区二区三区在线观看视频| 亚洲一级在线观看| 亚洲人成亚洲人成在线观看| 久久久99免费视频| 国产欧美日本| 亚洲欧美大片| 国产精品99久久久久久久久久久久| 欧美成人日本| 亚洲欧洲一区二区在线播放 | 久久久久久69| 国产亚洲午夜| 欧美呦呦网站| 亚洲欧美日韩一区二区在线| 国产精品入口麻豆原神| 午夜一区二区三区不卡视频| 在线一区欧美| 国产精品人人做人人爽| 亚洲一区二区在线播放| 洋洋av久久久久久久一区| 欧美日韩福利| 亚洲欧美大片| 欧美一区二区三区四区高清 | 亚洲免费中文| 免费成人黄色av| 国产欧美在线看| 99热在线精品观看| 亚洲美女色禁图| 国产精品swag| 欧美在线三级| 久久久久一本一区二区青青蜜月| 黄网站免费久久| 欧美黄色aa电影| 欧美另类videos死尸| 亚洲在线观看免费视频| 午夜精品视频在线观看| 一区视频在线播放| 亚洲国产综合在线看不卡| 欧美日韩精品免费观看视一区二区| 亚洲天堂偷拍| 欧美在线高清视频| 91久久精品国产91性色tv| 亚洲免费久久| 国产一区二区三区在线播放免费观看 | 亚洲国产视频一区| 欧美色一级片| 久久久高清一区二区三区| 老司机精品久久| 亚洲欧美日韩另类| 久久综合给合久久狠狠色| 亚洲午夜高清视频| 久久久久久亚洲精品不卡4k岛国| 亚洲靠逼com| 午夜精品一区二区三区在线播放| 亚洲福利久久| 亚洲一区视频在线观看视频| 亚洲电影av| 亚洲影院污污.| 亚洲欧洲在线看| 香蕉久久夜色精品| 一区二区电影免费观看| 久久久精品动漫| 亚洲欧美在线另类| 欧美国产日韩xxxxx| 久久久噜噜噜久久中文字幕色伊伊 | 欧美风情在线观看| 久久精品99国产精品| 欧美精品精品一区| 久久综合久久美利坚合众国| 欧美性猛交xxxx乱大交蜜桃| 欧美成人一品| 国内精品美女在线观看| 亚洲一级在线观看| 亚洲美女色禁图| 久久视频精品在线| 欧美一区二区日韩一区二区| 亚洲欧美一区二区三区在线| 欧美精品v国产精品v日韩精品| 老司机免费视频久久| 久久久免费观看视频| 浪潮色综合久久天堂| 91久久久久久久久| 一区二区三区**美女毛片| 亚洲欧美日韩一区二区三区在线观看 | 在线一区欧美| 亚洲私人影院在线观看| 亚洲欧美色婷婷| 久久久亚洲国产美女国产盗摄| 另类综合日韩欧美亚洲| 国产精品三区www17con| 国产精品二区在线| 日韩视频在线观看免费| 久久国产精品一区二区三区四区| 99在线精品观看| 欧美国产精品久久| 欧美成人视屏| 亚洲国产精品毛片| 久久视频一区二区| 欧美成人中文| 亚洲激情成人| 欧美福利电影在线观看| 亚洲日本成人| 亚洲视频一区| 国产精品丝袜白浆摸在线| 亚洲午夜一区二区| 久久国产精品亚洲va麻豆| 国产一区二区三区免费观看| 久久久国产午夜精品| 欧美激情性爽国产精品17p| 亚洲精品乱码久久久久久| 欧美精品久久99| 亚洲视频二区| 久久一区欧美| 一本久道久久综合狠狠爱| 国产精品一区二区三区四区 | 国产伦精品一区二区三区高清版| 亚洲欧美日韩国产综合| 麻豆精品视频在线| 日韩亚洲精品电影| 国产精品理论片| 久久精品一本| 亚洲精品国产精品国产自| 午夜亚洲影视| 亚洲日本黄色| 国产欧美日韩在线| 免费不卡亚洲欧美| 中国亚洲黄色| 亚洲欧美日韩国产一区二区三区| 亚洲精品一区二区三区婷婷月| 国产视频在线观看一区二区| 亚洲人成人一区二区在线观看| 亚洲一区二区三区在线播放| 国产精品一区二区久久国产| 欧美专区日韩视频| 亚洲国产婷婷香蕉久久久久久99| 亚洲免费影院| 亚洲国产婷婷| 国产热re99久久6国产精品| 你懂的国产精品永久在线| 亚洲午夜精品| 欧美国产三级| 久久久精品日韩| 亚洲自拍另类| 日韩午夜在线| 欲色影视综合吧| 国产精品私拍pans大尺度在线| 欧美成人xxx| 久久久久国产精品一区| 亚洲特级片在线| 亚洲国产精品高清久久久| 欧美一区永久视频免费观看| 夜夜嗨av一区二区三区四区| 在线电影一区| 激情久久久久| 国产一区二区三区四区hd|