黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 職業(yè)指南 聊一聊這幾個(gè)sql基礎(chǔ)面試題及答案

聊一聊這幾個(gè)sql基礎(chǔ)面試題及答案

更新時(shí)間:2023-01-10 14:10:10 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1175次

1. 什么是索引?

索引是一種數(shù)據(jù)結(jié)構(gòu),可以幫助我們快速的進(jìn)行數(shù)據(jù)的查找.

2. 索引是個(gè)什么樣的數(shù)據(jù)結(jié)構(gòu)呢?

索引的數(shù)據(jù)結(jié)構(gòu)和具體存儲(chǔ)引擎的實(shí)現(xiàn)有關(guān), 在MySQL中使用較多的索引有Hash索引,B+樹索引等,而我們經(jīng)常使用的InnoDB存儲(chǔ)引擎的默認(rèn)索引實(shí)現(xiàn)為:B+樹索引.

3. Hash索引和B+樹所有有什么區(qū)別或者說優(yōu)劣呢?

首先要知道Hash索引和B+樹索引的底層實(shí)現(xiàn)原理:

hash索引底層就是hash表,進(jìn)行查找時(shí),調(diào)用一次hash函數(shù)就可以獲取到相應(yīng)的鍵值,之后進(jìn)行回表查詢獲得實(shí)際數(shù)據(jù).B+樹底層實(shí)現(xiàn)是多路平衡查找樹.對(duì)于每一次的查詢都是從根節(jié)點(diǎn)出發(fā),查找到葉子節(jié)點(diǎn)方可以獲得所查鍵值,然后根據(jù)查詢判斷是否需要回表查詢數(shù)據(jù).

那么可以看出他們有以下的不同:

hash索引進(jìn)行等值查詢更快(一般情況下),但是卻無法進(jìn)行范圍查詢.

因?yàn)樵趆ash索引中經(jīng)過hash函數(shù)建立索引之后,索引的順序與原順序無法保持一致,不能支持范圍查詢.而B+樹的的所有節(jié)點(diǎn)皆遵循(左節(jié)點(diǎn)小于父節(jié)點(diǎn),右節(jié)點(diǎn)大于父節(jié)點(diǎn),多叉樹也類似),天然支持范圍.

hash索引不支持使用索引進(jìn)行排序,原理同上.

hash索引不支持模糊查詢以及多列索引的最左前綴匹配.原理也是因?yàn)閔ash函數(shù)的不可預(yù)測.AAAA和AAAAB的索引沒有相關(guān)性.

hash索引任何時(shí)候都避免不了回表查詢數(shù)據(jù),而B+樹在符合某些條件(聚簇索引,覆蓋索引等)的時(shí)候可以只通過索引完成查詢.

hash索引雖然在等值查詢上較快,但是不穩(wěn)定.性能不可預(yù)測,當(dāng)某個(gè)鍵值存在大量重復(fù)的時(shí)候,發(fā)生hash碰撞,此時(shí)效率可能極差.而B+樹的查詢效率比較穩(wěn)定,對(duì)于所有的查詢都是從根節(jié)點(diǎn)到葉子節(jié)點(diǎn),且樹的高度較低.

因此,在大多數(shù)情況下,直接選擇B+樹索引可以獲得穩(wěn)定且較好的查詢速度.而不需要使用hash索引.

4. 上面提到了B+樹在滿足聚簇索引和覆蓋索引的時(shí)候不需要回表查詢數(shù)據(jù),什么是聚簇索引?

在B+樹的索引中,葉子節(jié)點(diǎn)可能存儲(chǔ)了當(dāng)前的key值,也可能存儲(chǔ)了當(dāng)前的key值以及整行的數(shù)據(jù),這就是聚簇索引和非聚簇索引. 在InnoDB中,只有主鍵索引是聚簇索引,如果沒有主鍵,則挑選一個(gè)唯一鍵建立聚簇索引.如果沒有唯一鍵,則隱式的生成一個(gè)鍵來建立聚簇索引.

當(dāng)查詢使用聚簇索引時(shí),在對(duì)應(yīng)的葉子節(jié)點(diǎn),可以獲取到整行數(shù)據(jù),因此不用再次進(jìn)行回表查詢.

5. 非聚簇索引一定會(huì)回表查詢嗎?

不一定,這涉及到查詢語句所要求的字段是否全部命中了索引,如果全部命中了索引,那么就不必再進(jìn)行回表查詢.

舉個(gè)簡單的例子,假設(shè)我們?cè)趩T工表的年齡上建立了索引,那么當(dāng)進(jìn)行select age from employee where age < 20的查詢時(shí),在索引的葉子節(jié)點(diǎn)上,已經(jīng)包含了age信息,不會(huì)再次進(jìn)行回表查詢.

6. 在建立索引的時(shí)候,都有哪些需要考慮的因素呢?

建立索引的時(shí)候一般要考慮到字段的使用頻率,經(jīng)常作為條件進(jìn)行查詢的字段比較適合.如果需要建立聯(lián)合索引的話,還需要考慮聯(lián)合索引中的順序.此外也要考慮其他方面,比如防止過多的所有對(duì)表造成太大的壓力.這些都和實(shí)際的表結(jié)構(gòu)以及查詢方式有關(guān).

7. 聯(lián)合索引是什么?為什么需要注意聯(lián)合索引中的順序?

MySQL可以使用多個(gè)字段同時(shí)建立一個(gè)索引,叫做聯(lián)合索引.在聯(lián)合索引中,如果想要命中索引,需要按照建立索引時(shí)的字段順序挨個(gè)使用,否則無法命中索引.

具體原因?yàn)?

MySQL使用索引時(shí)需要索引有序,假設(shè)現(xiàn)在建立了"name,age,school"的聯(lián)合索引,那么索引的排序?yàn)? 先按照name排序,如果name相同,則按照age排序,如果age的值也相等,則按照school進(jìn)行排序.

當(dāng)進(jìn)行查詢時(shí),此時(shí)索引僅僅按照name嚴(yán)格有序,因此必須首先使用name字段進(jìn)行等值查詢,之后對(duì)于匹配到的列而言,其按照age字段嚴(yán)格有序,此時(shí)可以使用age字段用做索引查找,,,以此類推.因此在建立聯(lián)合索引的時(shí)候應(yīng)該注意索引列的順序,一般情況下,將查詢需求頻繁或者字段選擇性高的列放在前面.此外可以根據(jù)特例的查詢或者表結(jié)構(gòu)進(jìn)行單獨(dú)的調(diào)整.

8. 創(chuàng)建的索引有沒有被使用到?或者說怎么才可以知道這條語句運(yùn)行很慢的原因?

MySQL提供了explain命令來查看語句的執(zhí)行計(jì)劃,MySQL在執(zhí)行某個(gè)語句之前,會(huì)將該語句過一遍查詢優(yōu)化器,之后會(huì)拿到對(duì)語句的分析,也就是執(zhí)行計(jì)劃,其中包含了許多信息. 可以通過其中和索引有關(guān)的信息來分析是否命中了索引,例如possilbe_key,key,key_len等字段,分別說明了此語句可能會(huì)使用的索引,實(shí)際使用的索引以及使用的索引長度.

以上就是“聊一聊這幾個(gè)sql基礎(chǔ)面試題及答案”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产成人啪午夜精品网站 | 2022国产精品最新在线 | 91桃色在线看片 | 欧美日韩高清在线观看一区二区 | 美女丝袜控 | 欧美乱性视频 | 国产精品视频第一区二区 | 最近在线观看免费完整视频 | 精品国产_亚洲人成在线高清 | 欧美vs日韩vs国产在线观看 | 国产一区二区三区在线观看视频 | 狠狠色狠狠综合久久 | 国产自线一二三四2021 | www在线视频 | 成年性视频bbixx | 涩涩色中文综合亚洲 | 在线日韩三级 | 欧美成人h精品网站 | 男女午夜特黄毛片免费 | 免费久久一级欧美特大黄 | 特级深夜a级毛片免费观看 特级中国aaa毛片 | 久久网免费视频 | 成人羞羞国产免费软件 | 久草免费资源视频 | 日日射影院 | 99在线在线视频免费视频观看 | 亚洲午夜视频在线观看 | 久久这里只有精品免费看青草 | ww7788色淫网站女女免费 | 香港三级日本三级三级人妇99 | 九九伦理| 大香伊人网| 欧美亚洲综合在线观看 | 亚洲黄色天堂 | 婷婷色综合成人成人网小说 | 精品视频一区二区三区 | 亚洲欧美综合日韩字幕v在线 | 国产第一页亚洲 | 成人毛片免费观看视频大全 | 欧美视频一区二区 | 日本r级在线观看播放 |