MySQL索引知識面試題

2022-03-01 07:08:16 字數 2623 閱讀 1710

怎麼想到寫索引的呢 在牛客網刷題的時候看到乙個題目是這樣的

mysql資料庫,game_order表表結構如下,下面哪些sql能使用到索引()? 多選

我選的是 a b c d e  看到這就知道選的不對!

這裡涉及到了復合索引 最左優先原則 意思就是組合索引的中第乙個字段必須在查詢語句中用到 只要組合中索引第乙個字段出現在where中,不管其他字段有沒有出現都會使用啟用索引優化查詢

所以a是不對  正確答案是bcde

根據最左匹配原則可以知道b-tree建立索引的過程,比如假設有乙個3列索引(col1,col2,col3),那麼mysql只會會建立三個索引(col1),(col1,col2),(col1,col2,col3)。

說到這裡再來談談面試中會問的到所以面試題

q:什麼是索引

a:索引是一種資料結構,能夠快速檢索資料庫中的資料;

q:索引有哪些結構?

a:有hash索引 b+tree 索引 常用的是innode引擎  預設是b+tree的

q:ok那再說說b+tree和hash 有什麼優缺點嗎

a:hash索引底層是雜湊表,雜湊表是一種以key-value儲存資料的結構,所以多個資料在儲存關係上是完全沒有任何順序關係的,所以,對於區間查詢是無法直接通過索引查詢的,就需要全表掃瞄。所以,雜湊索引只適用於等值查詢的場景。而b+ 樹是一種多路平衡查詢樹,所以他的節點是天然有序的(左子節點小於父節點、父節點小於右子節點),所以對於範圍查詢的時候不需要做全表掃瞄

雜湊索引適合等值查詢,但是無法進行範圍查詢 

雜湊索引沒辦法利用索引完成排序 

雜湊索引不支援多列聯合索引的最左匹配規則 

如果有大量重複鍵值的情況下,雜湊索引的效率會很低,因為存在雜湊碰撞問題

q:那你知道b+ tree的葉子節點都可以存哪些東西嗎? 他們之間有什麼區別

a:innodb的b+ tree可能儲存的是整行資料,也有可能是主鍵的值

在 innodb 裡,索引b+ tree的葉子節點儲存了整行資料的是主鍵索引,也被稱之為聚簇索引。而索引b+ tree的葉子節點儲存了主鍵的值的是非主鍵索引,也被稱之為非聚簇索引

聚簇索引 查詢更快

q:為什麼聚簇索引查詢更快呢

a:因為主鍵索引樹的葉子節點直接就是我們要查詢的整行資料了。而非主鍵索引的葉子節點是主鍵的值,查到主鍵的值以後,還需要再通過主鍵的值再進行一次查詢

q:非主鍵索引一定會查詢多次嗎?

a:可以使用覆蓋索引來減少查詢次數

覆蓋索引(covering index)指乙個查詢語句的執行只用從索引中就能夠取得,不必從資料表中讀取。也可以稱之為實現了索引覆蓋。

當一條查詢語句符合覆蓋索引條件時,mysql只需要通過索引就可以返回查詢所需要的資料,這樣避免了查到索引後再返回表操作,減少i/o提高效率。

索引設計的原則

1)適合索引的列是出現在where子句中的列,或者連線子句中指定的列;

2)基數較小的類,索引效果較差,沒有必要在此列建立索引;

3)使用短索引,如果對長字串列進行索引,應該指定乙個字首長度,這樣能夠節省大量索引空間;

4)不要過度索引。索引需要額外的磁碟空間,並降低寫操作的效能。在修改表內容的時候,索引會進行更新甚至重構,索引列越多,這個時間就會越長。所以只保持需要的索引有利

聚簇索引的資料的物理存放順序與索引順序是一致的,即:只要索引是相鄰的,那麼對應的資料一定也是相鄰地存放在磁碟上的。如果主鍵不是自增id,那麼可以想 象,它會幹些什麼,不斷地調整資料的實體地址、分頁,當然也有其他一些措施來減少這些操作,但卻無法徹底避免。但,如果是自增的,那就簡單了,它只需要一 頁一頁地寫,索引結構相對緊湊,磁碟碎片少,效率也高

聚簇索引預設是主鍵,如果表中沒有定義主鍵,innodb 會選擇乙個唯一的非空索引代替。如果沒有這樣的索引,innodb 會隱式定義乙個主鍵來作為聚簇索引。innodb 只聚集在同乙個頁面中的記錄。包含相鄰健值的頁面可能相距甚遠。

實際上,索引也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄。

常見網路知識面試題

常見網路知識面試題 最初的的交換機是工作在osi rm開放體系結構的資料鏈路層,也就是第二層,而路由器一開始就設計工作在osi模型的網路層。由於交換機工作在osi的第二層 資料鏈路層 所以它的工作原理比較簡單,而路由器工作在osi的第三層 網路層 可以得到更多的協議資訊,路由器可以做出更加智慧型的 ...

基礎知識(面試題)

1 linux下如何使用配置檔案設定網絡卡ip位址 root luomuqing vim etc sysconfig network scripts ifcfg eth0設定靜態ip bootproto static onboot yes ipaddr 192.168.136.128 netmask...

Hadoop基礎知識面試題整理

一 問答題 1 簡單描述如何安裝配置乙個apache開源版hadoop,只描述即可,無需列出完整步驟,能列出步驟更好。1 安裝jdk並配置環境變數 etc profile 2 關閉防火牆 3 配置hosts檔案,方便hadoop通過主機名訪問 etc hosts 4 設定ssh免密碼登入 5 解壓縮...