<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        關于子查詢和連接的趣味小題目

        來源:懂視網 責編:小采 時間:2020-11-09 13:03:02
        文檔

        關于子查詢和連接的趣味小題目

        關于子查詢和連接的趣味小題目:今天有位同學出來一個趣味小題。 A: select title from simplified where id in (select id from analysis where word = something); B: select b.title from analysis a join simplified b on (a.id=
        推薦度:
        導讀關于子查詢和連接的趣味小題目:今天有位同學出來一個趣味小題。 A: select title from simplified where id in (select id from analysis where word = something); B: select b.title from analysis a join simplified b on (a.id=

        上面的3段sql,在MYSQL中執(zhí)行,哪一個效率最優(yōu),請講出原因

        看到這個問題,我想起了之前作面試官的時候,也問過這里的問題。從另一個角度,我收集了大家面對這題目的時候一些思考,總結成下面的一個面試小故事。

        這類題目真得蠻適合面試的時候考察對sql的掌握程度。

        模擬一個場景,面試者:小白,面試官:小二,下面開始這段面試過程…..

        小二:…. 我這里有個小問題,你看看(給出上面3段sql),balabala。。

        小白:這2個表數據量如何了,join ,子查詢的優(yōu)化根據數據量可能還有所不一樣吧。子查詢適合外結果集大,子查詢結果集小的情況,最好是能保證子查詢所返回的結果集盡量的小。

        小二:假設2表,數據量差不多,都是萬條記錄左右。

        小白:如果是這種的話,A應該會慢一點吧。 如果是在mysql上執(zhí)行的話,A中子查詢語句會認為與外面的simolified表進行關聯比較有效率。這樣的話A其實就回被翻譯成:

        select title from simplified where exists (select simplified.title from analysis where word= ‘something’ and id =simplified .id);

        這種in子查詢的形式,在外部表(比如上面的simplified )數據量較大的時候效率是很差的.

        小二: 恩,那么B和C之間有什么區(qū)別呢?

        小白:B和C在我看來,應該是差不多的,其主要區(qū)別就是B采用了別名。但是我認為應該是沒多大影響的。

        因為數據庫本身執(zhí)行時,都會再把表名給換成自己的別名。但我影響中好像記得有一條數據庫的優(yōu)化建議是盡量多表連接,最好是使用表的別名來引用列。

        對了,有對id建索引吧。

        小二: 2表id都是主鍵,這算是建了索引嗎?

        小白: 是的,主鍵可以保證記錄的唯一和主鍵域非空,數據庫管理系統(tǒng)對于主鍵自動生成唯一索引,所以主鍵也是一個特殊的索引。

        小二: 恩,一張表只能有一個主鍵,是不是就可以說只能有一個唯一的索引呢?

        小白: 不對,主鍵一定是唯一性索引,唯一性索引并不一定就是主鍵,主鍵就是能夠唯一標識表中某一行的屬性或屬性組,一個表只能有一個主鍵,但可以有多個候選索引。

        小二: 主鍵列和唯一索引列還有區(qū)別嗎?

        小白:應該有,我知道的主鍵列不允許空值,而唯一性索引列允許空值。一個表中可以有多個唯一性索引,但只能有一個主鍵。

        小二: 恩,回到上面的問題,你記得多表連接,最好使用表的別名來引用列,哪你有想過會是什么原因導致的呢?

        小白:我估計應該是Mysql內部處理邏輯有關吧,有可能是使用了別名,就會再建一個臨時表放入內存,這樣后面的命中會更高。

        小二: 差不多吧,mysql引擎自動生成temp表,造成緩存的效果。從這個sql,你大致應該能明白它的意圖了,你想想有沒有更優(yōu)的寫法,可以試試看…

        小白: 好的,我想想…..

        小白:

        select b.title from
        (select id from analysis where word=’something’)a,
        simplified b
        where a.id=b.id;

        如果這么去寫,應該是最快的。放棄子查詢和join。

        小二: 恩,不錯…..

        。。。

        如果我在面試中碰到這樣的小白,絕對會留下深刻的影響。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        關于子查詢和連接的趣味小題目

        關于子查詢和連接的趣味小題目:今天有位同學出來一個趣味小題。 A: select title from simplified where id in (select id from analysis where word = something); B: select b.title from analysis a join simplified b on (a.id=
        推薦度:
        標簽: 一個 查詢 連接
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲一欧洲中文字幕在线| 亚洲中文字幕在线观看| 亚洲无成人网77777| 97人伦色伦成人免费视频| 久久亚洲AV午夜福利精品一区| 亚洲AV网站在线观看| 久久精品国产亚洲一区二区三区 | av网站免费线看| 久久aⅴ免费观看| 亚洲AV永久无码区成人网站| 亚洲中文字幕一区精品自拍| 国内精品乱码卡1卡2卡3免费| 亚洲精品国产高清不卡在线| 污污污视频在线免费观看| 久久青草免费91线频观看站街| 亚洲国产精品无码专区在线观看| 亚洲精品无码成人片久久不卡| 在线免费观看毛片网站| 美女无遮挡免费视频网站| 麻豆一区二区免费播放网站| 亚洲精品伊人久久久久| 免费无码看av的网站| 亚洲精品私拍国产福利在线| 免费观看四虎精品成人| 亚洲毛片在线免费观看| 国产精品亚洲片在线观看不卡 | 最新中文字幕免费视频| 亚洲精品宾馆在线精品酒店| 亚洲黄色免费网站| 四虎亚洲精品高清在线观看| 无码中文字幕av免费放dvd| 亚洲国产午夜精品理论片| 在线涩涩免费观看国产精品| 亚洲男人天堂av| 日本一道在线日本一道高清不卡免费| 日本一区二区三区在线视频观看免费| 亚洲不卡中文字幕无码| 免费AA片少妇人AA片直播| 菠萝菠萝蜜在线免费视频| 亚洲人成在线观看| 日韩a级毛片免费观看|