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

大龍的博客

常用鏈接

統計

最新評論

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>
            亚洲一级网站| 老司机aⅴ在线精品导航| 欧美一区二区三区在线| 在线观看国产成人av片| 最新高清无码专区| 亚洲综合色在线| 久久天天躁狠狠躁夜夜爽蜜月| 在线看片一区| 亚洲国产中文字幕在线观看| 卡一卡二国产精品| 久久成人精品无人区| 亚洲欧洲精品一区二区三区波多野1战4| 香蕉国产精品偷在线观看不卡| 你懂的亚洲视频| 亚洲影院色无极综合| 国产婷婷色一区二区三区四区| 久久久综合视频| 99精品国产热久久91蜜凸| 亚洲激情在线播放| 免费成人黄色av| 中文av字幕一区| 久久久久国产精品厨房| 久久国产欧美精品| 免费成人高清| 日韩视频在线播放| 国产精品福利久久久| 91久久亚洲| 亚洲成色www8888| 免费h精品视频在线播放| 亚洲成色777777在线观看影院| 在线不卡亚洲| 亚洲自拍偷拍一区| 日韩一二在线观看| 久久精品国产77777蜜臀| 亚洲无线观看| 欧美激情视频在线播放| 国产日韩欧美精品一区| 亚洲毛片在线观看| 最新69国产成人精品视频免费| 久久久国产精品亚洲一区 | 欧美激情一二区| 亚洲免费av观看| 亚洲人成啪啪网站| 欧美在线一级va免费观看| 亚洲国产成人久久综合| 久久久久久久999| 久久精品91| 午夜一级久久| 久久久亚洲欧洲日产国码αv| 欧美在线免费观看视频| 欧美亚洲免费电影| 久久久欧美精品sm网站| 久久综合伊人77777尤物| 亚洲国产日韩美| 日韩午夜av| 欧美在线一级va免费观看| 99精品视频一区二区三区| 欧美日韩a区| 亚洲一区二区三区高清| 亚洲欧洲精品一区二区| 欧美制服丝袜第一页| 美女999久久久精品视频| 欧美在线视频日韩| 久久在线免费观看视频| 国产女主播一区二区| 亚洲自拍偷拍麻豆| 久久久久国产一区二区三区四区| 国户精品久久久久久久久久久不卡| 欧美在线一级va免费观看| 榴莲视频成人在线观看| 亚洲国产欧美一区二区三区同亚洲 | 狠狠色狠狠色综合日日小说| 性色av一区二区怡红| 久久免费黄色| 亚洲精品视频在线观看免费| 欧美色图首页| 欧美一区二区免费观在线| 美女日韩在线中文字幕| 亚洲福利免费| 国产日本欧美视频| 久久精品视频免费| 欧美在线视频观看| 久久久久久9| 久久天堂精品| 国产欧美日韩视频一区二区三区| 亚洲第一色在线| 牛夜精品久久久久久久99黑人| 先锋亚洲精品| 国产亚洲午夜| 久久亚洲私人国产精品va媚药| 99精品视频免费观看| 亚洲电影免费观看高清完整版在线观看| 久久精品国产在热久久 | 一区二区欧美激情| 一区二区在线视频| 亚洲午夜电影| 欧美另类变人与禽xxxxx| 国产一区二区三区日韩欧美| 久久国产福利国产秒拍| 久久av一区二区三区| 亚洲高清免费视频| 国产精品99久久久久久久女警| 国产精品永久| 老司机免费视频一区二区| 99国产精品久久久久久久| 久久久久久久网| 一区二区三区四区五区视频| 狠狠色噜噜狠狠狠狠色吗综合| 欧美三级日韩三级国产三级| 榴莲视频成人在线观看| 亚洲欧美日韩在线综合| 亚洲高清在线观看一区| 国产精品国产三级国产aⅴ入口| 久久免费视频网站| 中国成人亚色综合网站| 亚洲国产成人久久综合一区| 久久免费视频在线| 亚洲欧美中文在线视频| 一区二区三区毛片| 亚洲激情一区二区| 伊人久久亚洲美女图片| 91久久精品国产91久久性色| 国产视频一区在线| 国产精品国产三级国产普通话蜜臀| 欧美大片在线观看一区| 另类尿喷潮videofree| 久久国产精品99国产精| 国内外成人免费激情在线视频| 欧美成人午夜剧场免费观看| 国产色综合久久| 欧美~级网站不卡| 亚洲综合电影| 中文在线资源观看网站视频免费不卡| 免费在线观看精品| 国内精品久久国产| 久久精品视频在线| 久久理论片午夜琪琪电影网| 国产视频亚洲精品| 国产精品扒开腿做爽爽爽视频| 欧美日韩国产色综合一二三四 | 香蕉国产精品偷在线观看不卡| 亚洲欧洲精品一区二区| 亚洲一二三四区| 午夜久久影院| 国产欧美精品一区二区色综合 | 性做久久久久久久免费看| 日韩一二三在线视频播| 欧美国产日韩一区二区| 欧美成人免费全部观看天天性色| 久久综合久久综合这里只有精品| 久久久久久亚洲精品不卡4k岛国| 久久久九九九九| 老司机成人在线视频| 欧美成人dvd在线视频| 久久亚洲精品视频| 久久久久一本一区二区青青蜜月| 99精品国产在热久久| 黄色小说综合网站| 欧美国产1区2区| 欧美黄免费看| 欧美另类高清视频在线| 国产精品初高中精品久久| 国产精品综合色区在线观看| 国产伪娘ts一区| 亚洲国产成人精品女人久久久 | 欧美高清一区| 亚洲国产精品免费| 欧美影院视频| 夜夜嗨av一区二区三区| 国产一级揄自揄精品视频| 欧美精品成人91久久久久久久| 久久精品人人做人人综合| 亚洲国产片色| 国产日韩在线一区| 欧美日韩另类字幕中文| 欧美一区二区三区四区在线| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美在线播放| 一本色道久久88亚洲综合88| 欧美插天视频在线播放| 欧美专区在线观看| 在线一区二区三区四区五区| 亚洲小视频在线观看| 亚洲精品国产日韩| 亚洲毛片在线看| 91久久极品少妇xxxxⅹ软件| 国产午夜精品麻豆| 韩日视频一区| 亚洲韩国青草视频| 老司机aⅴ在线精品导航| 新67194成人永久网站| 亚洲欧美精品一区| 99精品视频免费| 亚洲精品在线观| 日韩视频精品在线观看| 亚洲乱码视频| 欧美一区三区二区在线观看| 亚洲自拍另类| 亚洲欧美国产va在线影院| 久久www成人_看片免费不卡|