數據庫—索引面試常見問題

問答建立在知道數據結構的基礎上。

  1. 索引是什麼?
  • 索引是對數據庫表中一列或多列的值進行排序的一種結構。
  1. 爲什麼數據要用索引?
  • 提升檢索速度、加速表和表之間的連接
  1. 索引的類型有哪些?
  • FULLTEXT 全文索引 (MyISAM、Innodb5.6+)CHAR、VARCHAR ,TEXT 列上可以創建全文索引
  • HASH 哈希索引 (MEMORY支持)
  • BTREE B樹索引
  • B+TREE B+樹索引
  • RTREE R樹索引
  1. 索引的種類有哪些?分別的特點是什麼?
  • 普通索引:加速查詢
  • 唯一索引:加速查詢 + 列值唯一 + 可以爲null
  • 主鍵索引:加速查詢 + 列值唯一 + 不可爲null + 表中只有一個
  • 組合索引:多列值組成一個索引,專用於組合搜索,效率大於索引合併
  • 全文索引:對文本的內容進行分詞,進行搜索
  1. 什麼數據應該添加索引?
  • Where子句中經常使用的字段應該創建索引
  • 分組字段或者排序字段應該創建索引
  • 兩個表的連接字段應該創建索引
  • 存儲空間固定的字段更適合選作索引的關鍵字 text類型的字段相比,char類型更適合
  • 佔用存儲空間少的字段更適合選作索引的關鍵字 與字符串相比,整數字段更適合
  • 文章長數據索引應該考慮使用短索引,如果前面的字段多數都是不同的,那就指定一個前綴長度。
  1. 哪些數據不適合作爲索引?
  • 更新頻繁的字段不適合創建索引
  • 不會出現在where子句中的字段
  1. mysql索引的數據結構是什麼?
  • 一般使用B+樹做索引
  1. 你還知道其他的索引類型嗎?
  • Hash索引 B樹索引
  1. Hash索引和B+樹索引的時間複雜度是多少?
  • o(1) 和 o(logN)
  1. hash索引快爲什麼mysql還要用B+TREE做索引?
  • 這和業務場景有關。只選一個數據,hash更快(o(1))。數據庫中經常會選擇N條如果使用hash索引那就是o(n),這時候由於B+樹索引有序(o(logn)),且葉子節點上有鏈表相連,它的查詢效率比hash就快很多了。
  • 索引存儲在硬盤上,一般來說索引本身很大,不能一次性全部存在內存中,B+樹的設計可以允許數據分批加載,同時樹的高度較低,查找效率高。
  • 大家都知道硬盤的I/O速度相比內存來說非常慢,而索引是用於加快查詢速度的,需要減少I/O操作,內存和磁盤以頁爲單位交換數據,爲了減少I/O,索引在新建節點的時候,是直接申請一個頁的空間,存儲分配是按頁對齊,就實現了一個節點一次I/O。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章