MySQL 高頻面試題

2021-10-21 02:05:00 字數 1762 閱讀 9430

1、什麼是索引?

索引是一種資料結構,幫助我們快速的進行資料查詢。

2、索引是什麼樣的資料結構?

索引的資料結構與使用的儲存引擎實現有關,在mysql中使用較多有hash索引和b+樹索引等,而我們經常使用的innodb儲存引擎預設的索引實現為b+樹索引。

3、hash索引和b+樹索引有什麼區別或者說優劣呢?

先說hash索引

hash索引底層就是hash表,進行資料查詢時,執行一次hash函式就可以獲取相應的鍵值,之後進行回表查詢獲取實際的資料。

hash索引進行等值查詢更快,但無法進行範圍查詢、不能排序、不能使用組合索引的最左字首匹配。

原因是因為hash索引經過hash函式建立索引後,索引順序無法與原順序保持一致。

hash索引任何時候都避免不了回表查詢。

然後說b+樹索引

b+樹底層實現是多路平衡查詢樹.對於每一次的查詢都是從根節點出發,查詢到葉子節點方可以獲得所查鍵值,然後根據查詢判斷是否需要回表查詢資料。

b+樹支援範圍查詢、支援排序、支援組合索引的最左字首匹配。

原因是因為b+樹的的所有節點皆遵循左節點小於父節點,右節點大於父節點。

b+樹在符合某些條件(聚簇索引,覆蓋索引等)的時候可以只通過索引完成查詢.不需要回表查詢。

4、什麼是聚簇索引(什麼是主鍵索引,和普通索引有什麼區別)?

在b+樹索引中,聚簇索引的葉子節點包含所有字段,非聚簇索引(也叫二級索引)只包含索引欄位+主鍵字段(或主鍵指標)。在innodb中,只有主鍵索引是聚簇索引,如果沒有主鍵則挑選乙個唯一鍵建立聚簇索引,然後沒有唯一鍵則隱式生成乙個鍵來建立聚簇索引。

5、什麼是覆蓋索引?

當查詢使用聚簇索引或查詢所要求的全部欄位都命中了索引,不需要回表查詢,那麼就是覆蓋索引。

6、在建立索引都有哪些考慮因素?

首先考慮的是字段的使用頻率,經常作為條件去進行查詢的字段比較合適。並且表資料較多的時候,值分布大(選擇性較好的),建立索引會明顯地提高查詢速度。

(經常與其他表進行連線的表,在連線欄位上應該建立索引)

然後需要建立組合索引的話,還需要考慮遵循他的最左字首匹配。

此外還需要考慮其他方面,如過多的建立索引會導致對插入、更新、刪除的開銷,減低處理資料的效能。

7、組合索引是什麼?為什麼需要遵循他的最左字首匹配

mysql可以使用多個字段同時建立乙個索引,叫組合索引。

具體原因是:mysql在建立組合索引時是先按第一列進行排序,然後在第一列排好序的基礎上再對第二列排序,然後沒有第一列直接訪問第二列的話,那肯定是無序的,直接訪問後面的列也就用不到索引了。

8、建立的索引有沒有被使用到,或者說怎麼才知道這條語句執行很慢的原因?

mysql提供了explain命令來檢視語句的執行計畫,mysql在執行語句之前,會將該語句從查詢優化器過一遍,之後會拿到對語句的分析,也就是執行計畫,其中包含了許多資訊,可以通過其中對索引有關的資訊來分析是否命中了索引,例如possibe_key、key、key_len、type等字段,分別說明了此語句可能會使用到的索引,實際使用到的索引以及使用的索引長度,還有就是訪問型別,表示在表找到所需行的方式,他有幾個值,效能從好到差分別是 const、eq_ref、ref、range、index、all。

9、那麼在哪些情況下會發生建立了索引但在查詢時候沒有用到呢?

mysql高頻更新 MySQL高頻面試題的靈魂拷問

唯一索引比普通索引快嗎,為什麼?唯一索引不一定比普通索引快,還可能慢.查詢時,在未使用limit 1的情況下,在匹配到一條資料後,唯一索引即返回,普通索引會繼續匹配下一條資料,發現不匹配後返回.如此看來唯一索引少了一次匹配,但實際上這個消耗微乎其微.更新時,這個情況就比較複雜了.普通索引將記錄放到c...

C 高頻面試題

malloc free是c語言的標準庫函式,new delete是c 的運算子。由於malloc free是庫函式而不是運算子,不在編譯器控制許可權之內。對於使用者自定義的物件而言,用maloc free無法滿足動態管理物件的要求。廢話 new是型別安全的,malloc不是。int a new fl...

C 高頻面試題

字首式可以返回物件的引用,而字尾式必須返回物件的值所以導致在大物件產生時產生了較大的複製開銷,因此處理自定義型別的時候盡量使用字首式。a b b a a b 相對於c,c 多了過載 內聯函式 異常處理,擴充套件了物件導向的設計內容 類 繼承 虛函式 模板。c 並不是完全的物件導向,它也可以寫出面向過...