色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么要盡量避免使用IN和NOT IN呢?

Android編程精選 ? 來(lái)源:博客園 ? 作者:博客園 ? 2022-03-18 09:46 ? 次閱讀

  • WHY?
    • 1、效率低
    • 2、容易出現(xiàn)問(wèn)題,或查詢(xún)結(jié)果有誤 (不能更嚴(yán)重的缺點(diǎn))
  • HOW?
    • 1、用 EXISTS 或 NOT EXISTS 代替
    • 2、用JOIN 代替

WHY?

IN 和 NOT IN 是比較常用的關(guān)鍵字,為什么要盡量避免呢?

1、效率低

項(xiàng)目中遇到這么個(gè)情況:

t1表 和 t2表 都是150w條數(shù)據(jù),600M的樣子,都不算大。

但是這樣一句查詢(xún) ↓

select*fromt1wherephonenotin(selectphonefromt2)

直接就把我跑傻了。。。十幾分鐘,檢查了一下 phone在兩個(gè)表都建了索引,字段類(lèi)型也是一樣的。原來(lái)not in 是不能命中索引的。。。。

改成 NOT EXISTS 之后查詢(xún) 20s ,效率真的差好多。

select*fromt1
wherenotEXISTS(selectphonefromt2wheret1.phone=t2.phone)

2、容易出現(xiàn)問(wèn)題,或查詢(xún)結(jié)果有誤 (不能更嚴(yán)重的缺點(diǎn))

以 IN 為例。建兩個(gè)表:test1 和 test2

createtabletest1(id1int)
createtabletest2(id2int)

insertintotest1(id1)values(1),(2),(3)
insertintotest2(id2)values(1),(2)

我想要查詢(xún),在test2中存在的 test1中的id 。使用IN的一般寫(xiě)法是:

selectid1fromtest1
whereid1in(selectid2fromtest2)

結(jié)果是:

402b60b0-9474-11ec-952b-dac502259ad0.jpg圖片

OK 木有問(wèn)題!

但是如果我一時(shí)手滑,寫(xiě)成了:

selectid1fromtest1
whereid1in(selectid1fromtest2)

不小心把id2寫(xiě)成id1了 ,會(huì)怎么樣呢?

結(jié)果是:

404094bc-9474-11ec-952b-dac502259ad0.jpg圖片

EXCUSE ME!為什么不報(bào)錯(cuò)?

單獨(dú)查詢(xún) select id1 from test2 是一定會(huì)報(bào)錯(cuò): 消息 207,級(jí)別 16,狀態(tài) 1,第 11 行 列名 'id1' 無(wú)效。

然而使用了IN的子查詢(xún)就是這么敷衍,直接查出 1 2 3

這僅僅是容易出錯(cuò)的情況,自己不寫(xiě)錯(cuò)還沒(méi)啥事兒,下面來(lái)看一下 NOT IN 直接查出錯(cuò)誤結(jié)果的情況:

給test2插入一個(gè)空值:

insertintotest2(id2)values(NULL)

我想要查詢(xún),在test2中不存在的 test1中的id 。

selectid1fromtest1
whereid1notin(selectid2fromtest2)

結(jié)果是:

4050c22e-9474-11ec-952b-dac502259ad0.jpg圖片

空白!顯然這個(gè)結(jié)果不是我們想要的。我們想要3。為什么會(huì)這樣呢?

原因是:NULL不等于任何非空的值??!如果id2只有1和2, 那么3<>1 且 3<>2 所以3輸出了,但是 id2包含空值,那么 3也不等于NULL 所以它不會(huì)輸出。

跑題一句:建表的時(shí)候最好不要允許含空值,否則問(wèn)題多多。

HOW?

1、用 EXISTS 或 NOT EXISTS 代替

select*fromtest1
whereEXISTS(select*fromtest2whereid2=id1)

select*FROMtest1
whereNOTEXISTS(select*fromtest2whereid2=id1)

2、用JOIN 代替

selectid1fromtest1
INNERJOINtest2ONid2=id1

selectid1fromtest1
LEFTJOINtest2ONid2=id1
whereid2ISNULL

妥妥的沒(méi)有問(wèn)題了!

PS:那我們死活都不能用 IN 和 NOT IN 了么?并沒(méi)有,一位大神曾經(jīng)說(shuō)過(guò),如果是確定且有限的集合時(shí),可以使用。如 IN (0,1,2)。

審核編輯 :李倩



聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7067

    瀏覽量

    89108
  • Join
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    3260

原文標(biāo)題:面試官:為什么要盡量避免使用 IN 和 NOT IN 呢?

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    長(zhǎng)鑫已重新設(shè)計(jì)DRAM芯片,盡量避免使用美國(guó)原產(chǎn)技術(shù)

    6月12日,日經(jīng)新聞引述未具名消息人士報(bào)導(dǎo),合肥長(zhǎng)鑫已經(jīng)重新設(shè)計(jì)了其DRAM芯片,以盡量減少對(duì)美國(guó)原產(chǎn)技術(shù)的使用。 日經(jīng):長(zhǎng)鑫已重新設(shè)計(jì)DRAM芯片,盡量避免使用美國(guó)原產(chǎn)技術(shù) 據(jù)日經(jīng)新聞亞洲評(píng)論報(bào)導(dǎo)
    發(fā)表于 06-13 18:30 ?3432次閱讀

    PCB走線時(shí)為什么要盡量避免銳角和直角?

    出現(xiàn),直角走線一般是布線中要求盡量避免的情況,也幾乎成為衡量布線好壞的標(biāo)準(zhǔn)之一,那么直角走線究竟會(huì)對(duì)信號(hào)傳輸產(chǎn)生多大的影響?  從原理上說(shuō),銳角、直角走線會(huì)使傳輸線的線寬發(fā)生變化,造成阻抗的不連續(xù)
    發(fā)表于 09-21 11:48

    C2000程序中全局變量的使用應(yīng)該盡量減少嗎

    一般來(lái)說(shuō),編程時(shí)我們應(yīng)該盡量減少使用全局變量,但是在DSP程序中,我們是不是應(yīng)該也要盡量減少使用全局變量?
    發(fā)表于 12-11 13:50

    如何去避免heisenbug

    frangi黑森矩陣是什么意思?如何去避免heisenbug?有哪些解決辦法?
    發(fā)表于 10-19 09:03

    為什么C語(yǔ)言要避免使用Null指針

    為什么C語(yǔ)言要避免使用Null指針?指針作為數(shù)組的應(yīng)用有哪些
    發(fā)表于 12-20 07:19

    如何避免高頻干擾?

    如何避免高頻干擾? 避免高頻干擾的基本思路是盡量降低高頻信號(hào)電磁場(chǎng)的干擾,也就是所謂的串?dāng)_(Crosstalk)??捎美蟾咚傩盘?hào)和
    發(fā)表于 01-02 11:14 ?6261次閱讀

    目前最不值得入手的4款華為手機(jī),遇到時(shí)要盡量避開(kāi) 都是“坑”!

    。每年華為都會(huì)給用戶帶來(lái)種種的驚喜,在這期間,它發(fā)布不少高性?xún)r(jià)比的手機(jī),無(wú)論性能、外觀等綜合方面表現(xiàn)的都格外出色,成為不少發(fā)燒友的首選。然而并不是每一款華為手機(jī)都值得入手,有很多華為手機(jī)表面看上去毫無(wú)瑕疵,實(shí)際上都是坑,為避免大家入坑,小編盤(pán)點(diǎn)了目前最不值得入手的4款華為手機(jī),遇到時(shí)
    的頭像 發(fā)表于 08-21 17:18 ?7249次閱讀

    為什么PCB布線中要盡量避免銳角和直角走線

    如果是射頻線,在轉(zhuǎn)角的地方如果是直角,則有不連續(xù)性,而不連續(xù)性將易導(dǎo)致高次模的產(chǎn)生,對(duì)輻射和傳導(dǎo)性能都有影響。RF信號(hào)線如果走直角,拐角處的有效線寬會(huì)增大,阻抗不連續(xù),引起信號(hào)反射。為了減小不連續(xù)性,要對(duì)拐角進(jìn)行處理,有兩種方法:切角和圓角。圓弧角的半徑應(yīng)足夠大,一般來(lái)說(shuō),要保證:R>3W。
    發(fā)表于 09-16 11:49 ?5831次閱讀
    為什么PCB布線中<b class='flag-5'>要盡量</b><b class='flag-5'>避免</b>銳角和直角走線

    PCB設(shè)計(jì)中的EMC問(wèn)題怎么避免

    在文章的開(kāi)篇就說(shuō)過(guò),EMC和SI、PI息息相關(guān),很多時(shí)候我們會(huì)告訴大家,我們沒(méi)法進(jìn)行EMC仿真,但我們會(huì)從板級(jí)來(lái)盡量避免一些EMC問(wèn)題的發(fā)生,說(shuō)白了其實(shí)就是盡量保證SI及PI的性能(這是我們的專(zhuān)長(zhǎng)),從源頭上來(lái)
    發(fā)表于 10-13 09:43 ?1874次閱讀

    電路設(shè)計(jì)中為什么要盡量提高輸入阻抗?

    級(jí)的電流輸出能力減少了很大負(fù)擔(dān)。所以電路設(shè)計(jì)中盡量提高輸入阻抗。 再說(shuō)輸出阻抗,它可以看做輸出端內(nèi)阻 r,可以等效為一個(gè)理想信號(hào)源(電源)和這個(gè)內(nèi)阻 r 的串聯(lián)。把它和下級(jí)電路的輸入阻抗結(jié)合起來(lái)看,就相當(dāng)于一個(gè)理想信號(hào)源(電源)和
    的頭像 發(fā)表于 03-02 10:52 ?1.4w次閱讀

    電磁騷擾源為什么要盡量遠(yuǎn)離孔洞開(kāi)口

    電磁騷擾源為什么要盡量遠(yuǎn)離孔洞開(kāi)口?? 電磁騷擾源指的是任何能夠生成電磁場(chǎng)或電磁波的設(shè)備或設(shè)施,這些電磁波可以干擾無(wú)線信號(hào)、危害人體健康或者破壞電子設(shè)備等。在現(xiàn)代社會(huì)中,電磁騷擾已經(jīng)成為了一個(gè)
    的頭像 發(fā)表于 09-12 14:52 ?537次閱讀

    時(shí)鐘與復(fù)位信號(hào)設(shè)計(jì)方案

    我們?cè)O(shè)計(jì)時(shí)要盡可能避免在內(nèi)部產(chǎn)生時(shí)鐘,如果操作不當(dāng),會(huì)導(dǎo)致設(shè)計(jì)功能和時(shí)序問(wèn)題??偠灾?,盡量在代碼中避免操作時(shí)鐘。
    的頭像 發(fā)表于 09-19 09:26 ?1382次閱讀
    時(shí)鐘與復(fù)位信號(hào)設(shè)計(jì)方案

    SMT貼片打樣如何盡量避免出現(xiàn)錫不飽滿?

    在SMT貼片打樣過(guò)程中,焊接上錫是很重要的一步驟。焊點(diǎn)不飽滿對(duì)電路板的使用性能以及外形美觀度都會(huì)有非常嚴(yán)重的影響。
    的頭像 發(fā)表于 10-24 16:33 ?859次閱讀

    如何避免PLC程序卡死?

    編寫(xiě)穩(wěn)定的程序:編寫(xiě)良好的、穩(wěn)定的PLC程序是避免程序卡死的關(guān)鍵。確保程序邏輯清晰、簡(jiǎn)潔,并遵循編程最佳實(shí)踐。避免死循環(huán)、邏輯錯(cuò)誤和沖突的發(fā)生。
    的頭像 發(fā)表于 01-26 09:14 ?653次閱讀

    在選取rc元件參數(shù)時(shí),為什么應(yīng)盡量避免選取小電阻

    在選取RC元件(電阻和電容)參數(shù)時(shí),應(yīng)盡量避免選取小電阻,這主要基于以下幾個(gè)方面的考慮: 1. 電壓分壓效應(yīng) 降低電壓輸出 :小電阻作為負(fù)載時(shí),會(huì)與信號(hào)源的內(nèi)阻形成分壓電路,從而大幅度降低信號(hào)源輸出
    的頭像 發(fā)表于 09-18 15:32 ?513次閱讀
    主站蜘蛛池模板: 免费观看成人www精品视频在线| 超碰免费视频公开观看| 午夜插插插| 午夜性色一区二区三区不卡视频| 我的好妈妈BD免费观看| 亚洲 欧美 国产 综合 在线| 亚洲2017久无码| 一品道门免费高清视频| 找老女人泻火对白自拍| 97在线超碰免费视频| 成人a毛片久久免费播放| 国产东北男同志videos网站| 国产在线播放91| 快播h动漫网| 日本68xxxxxxxxx老师| 性一交一无一伦一精一品| 一本色道久久综合亚洲精品蜜桃冫| 中文字幕绝色少妇性| WWWXXXX兽交| 国产喷水1区2区3区咪咪爱AV| 久久re这里精品23| 男人天堂黄色| 同房交换4p好爽| 在线 日韩 欧美 国产 社区| WWW国产精品内射熟女| 国产蜜臀AV在线一区视频| 久久久久久久网站| 亲嘴扒胸摸屁股视频免费网站 | 嘟嘟嘟影院免费观看视频| 国产亚洲精品久久久久久国模美 | 国产成人久久精品激情| 久久91精品久久久久久水蜜桃 | 国产午夜伦鲁鲁| 麻豆影视在线直播观看免费| 色婷婷AV99XX| 伊人久久青青| 福利一区国产| 牢记永久免费网址| 玩两个少妇女邻居| 96.8在线收听| 国产综合18久久久久久软件|