小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

java面試題 --- MySQL②

 貪挽懶月 2022-06-20 發(fā)布于廣東

1. 說說你對索引的認(rèn)識?

  • 索引是幫助 SQL 高效獲取數(shù)據(jù)的一種數(shù)據(jù)結(jié)構(gòu)。

2. 既然你說索引是一種數(shù)據(jù)結(jié)構(gòu),那它底層到底是什么呢?

  • 索引底層數(shù)據(jù)結(jié)構(gòu)主要有兩種,B+ 樹和 Hash 表,InnoDB 用的就是 B+ 樹。

3. B+ 樹索引和 Hash 索引有什么區(qū)別呢?

  • B+ 樹索引天然有序,左子節(jié)點(diǎn)小于父節(jié)點(diǎn),右子節(jié)點(diǎn)大于父節(jié)點(diǎn)。葉子節(jié)點(diǎn)存放數(shù)據(jù)行或者主鍵,所有葉子節(jié)點(diǎn)之間形成一條鏈相互關(guān)聯(lián)。因?yàn)?B+ 樹有序,所以它不僅可以用于等值查詢,還可以用于范圍查詢。由于數(shù)據(jù)存放在葉子節(jié)點(diǎn),每次檢索都要從父節(jié)點(diǎn)開始,檢索的效率不是很高;
  • Hash 索引用的是 Hash 表來存儲,直接根據(jù)鍵值對進(jìn)行映射,因此只能用于等值查詢,且效率很高。它也沒辦法用索引來進(jìn)行排序。

4. B+ 樹葉子節(jié)點(diǎn)可以存放哪些東西?

  • 可以存放數(shù)據(jù)行,也可以存放主鍵的值。存放數(shù)據(jù)行時(shí),叫做聚簇索引,也叫主鍵索引,存放主鍵的值時(shí),叫做非聚簇索引,也叫非主鍵索引。InnoDB 默認(rèn)用的都是聚簇索引。

5. 聚簇索引和非聚簇索引在查詢數(shù)據(jù)時(shí)有什么區(qū)別?

  • 聚簇索引更快,因?yàn)槿~子節(jié)點(diǎn)存放的是數(shù)據(jù)行,不需要回表查詢。

6. 非聚簇索引一定要回表查詢嗎?

  • 不一定,正常情況是查到拿到葉子節(jié)點(diǎn)存儲的主鍵的值,然后再根據(jù)主鍵值去做回表查詢,但如果是索引覆蓋的情況,就不需要回表查詢了。

7. 什么叫索引覆蓋?

  • 索引覆蓋就是查詢的字段都建了索引,數(shù)據(jù)可以直接從索引中獲取,不需要查詢數(shù)據(jù)表。

8. 使用索引有哪些優(yōu)缺點(diǎn)?

  • 優(yōu)點(diǎn):提高檢索效率,提高排序的效率;
  • 缺點(diǎn):降低了寫數(shù)據(jù)的效率,因?yàn)閷憯?shù)據(jù)的同時(shí)還要維護(hù)索引;索引也占用額外的空間。

9. 如果要對用戶密碼字段建索引,你打算建什么索引?

  • 密碼字段可以用前綴索引,比如用密碼字段的前 10 位做索引,因?yàn)榍?10 位的標(biāo)識度也夠高了。前綴索引可以節(jié)省空間。

10. 創(chuàng)建聯(lián)合索引的時(shí)候怎么確定哪個(gè)字段放前面?

  • 識別度最高的字段放到最前面,這樣可以提高效率。

11. MySQL 5.6 開始對索引做了什么優(yōu)化,了解嗎?

  • 做了索引下推的優(yōu)化,索引下推可以減少回表查詢的次數(shù)。比如建立了聯(lián)合索引 index(name, age),然后查詢 select * from user where name like '張%' and age = 20,沒有索引下推的話,MySQL 會把name like '張%'的數(shù)據(jù)都返回到 MySQL 服務(wù)端,服務(wù)端再去判斷這些數(shù)據(jù)的 age 是否為 20;而有了索引下推的話,查詢的時(shí)候會先判斷 name like '張%' 的這些數(shù)據(jù) age 是否為 20,不是的直接忽略。

12. 你認(rèn)為哪些情況適合建索引?哪些情況不適合建索引?

  • 頻繁作為查詢條件的字段、排序字段、統(tǒng)計(jì)和分組的字段以及與其他表關(guān)聯(lián)的字段應(yīng)該建立索引;
  • 頻繁更新的字段以及字段值大量重復(fù)的不適合建立索引。

13. 使用索引的時(shí)候你會遵循哪些原則?

  • 全值匹配是最理想的狀態(tài),即查詢條件字段都建立了索引且順序和索引順序一致;
  • 遵循最左前綴法則,比如索引順序是 A、B、C,那么查詢條件一定要有 A,否則 B 和 C 都會失效;中間索引頁不能斷,如果查詢條件是 A 和 C,少了 B,那么 C 也會失效;
  • 索引列上不要做任何計(jì)算,計(jì)算將導(dǎo)致索引失效;
  • 范圍之后的列索引會失效,比如 name like '張% and age = 20',那么 age 這個(gè)索引將失效;
  • 寫模糊查詢時(shí)百分號要寫右邊,否則索引失效;
  • 不要寫 select *,用到什么列就查什么列,這樣可以增加索引覆蓋的機(jī)率;
  • 不等于、is null、is not null、or 這些都會導(dǎo)致索引失效;
  • 字符串的引號不能漏寫,否則索引會失效。

輔助記憶,詩曰:

全值匹配我最愛, 最左前綴要遵守;帶頭大哥不能死, 中間兄弟不能斷;索引列上少計(jì)算, 范圍之后全失效;模糊百分寫最右, 覆蓋索引不寫星;不等空值還有或, 索引失效要少用;字符引號不可丟, 牢記以上就無憂。


掃描二維碼

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多