MySQL面试题 | 附答案解析(三)
- 索引有哪幾種類型?
主鍵索引: 數據列不允許重復,不允許為NULL,一個表只能有一個主鍵。
唯一索引: 數據列不允許重復,允許為NULL值,一個表允許多個列創建唯一索引。可以通過 ALTER TABLE table_name ADD UNIQUE (column);
創建唯一索引可以通過 ALTER TABLE table_name ADD UNIQUE (column1,column2); 創建唯一組合索引
普通索引: 基本的索引類型,沒有唯一性的限制,允許為NULL值。可以通過ALTER TABLE table_name ADD INDEX index_name (column);
創建普通索引可以通過ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);
創建組合索引全文索引:是目前搜索引擎使用的一種關鍵技術。可以通過ALTER TABLE table_name ADD FULLTEXT (column);創建全文索引
- 索引的數據結構(b樹,hash)
索引的數據結構和具體存儲引擎的實現有關,在MySQL中使用較多的索引有Hash索引,B+樹索引等,而我們經常使用的InnoDB存儲引擎的默認索引實現為:B+樹索引。對于哈希索引來說,底層的數據結構就是哈希表,因此在絕大多數需求為單條記錄查詢的時候,可以選擇哈希索引,查詢性能最快;其余大部分場景,建議選擇BTree索引。
1)B樹索引
mysql通過存儲引擎取數據,基本上90%的人用的就是InnoDB了,按照實現方式分,InnoDB的索引類型目前只有兩種:BTREE(B樹)索引和HASH索引。B樹索引是Mysql數據庫中使用最頻繁的索引類型,基本所有存儲引擎都支持BTree索引。通常我們說的索引不出意外指的就是(B樹)索引(實際是用B+樹實現的,因為在查看表索引時,mysql一律打印BTREE,所以簡稱為B樹索引)
查詢方式:
主鍵索引區:PI(關聯保存的時數據的地址)按主鍵查詢,
普通索引區:si(關聯的id的地址,然后再到達上面的地址)。所以按主鍵查詢,速度最快
B+tree性質:
1.)n棵子tree的節點包含n個關鍵字,不用來保存數據而是保存數據的索引。
2.)所有的葉子結點中包含了全部關鍵字的信息,及指向含這些關鍵字記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。
3.)所有的非終端結點可以看成是索引部分,結點中僅含其子樹中的最大(或最小)關鍵字。
4.)B+ 樹中,數據對象的插入和刪除僅在葉節點上進行。
5.)B+樹有2個頭指針,一個是樹的根節點,一個是最小關鍵碼的葉節點。
2)哈希索引
簡要說下,類似于數據結構中簡單實現的HASH表(散列表)一樣,當我們在mysql中用哈希索引時,主要就是通過Hash算法(常見的Hash算法有直接定址法、平方取中法、折疊法、除數取余法、隨機數法),將數據庫字段數據轉換成定長的Hash值,與這條數據的行指針一并存入Hash表的對應位置;如果發生Hash碰撞(兩個不同關鍵字的Hash值相同),則在對應Hash鍵下以鏈表形式存儲。當然這只是簡略模擬圖。
- 索引的基本原理
索引用來快速地尋找那些具有特定值的記錄。如果沒有索引,一般來說執行查詢時遍歷整張表。
索引的原理很簡單,就是把無序的數據變成有序的查詢
把創建了索引的列的內容進行排序
對排序結果生成倒排表在倒排表
內容上拼上數據地址鏈
在查詢的時候,先拿到倒排表內容,再取出數據地址鏈,從而拿到具體數據
最后,小編分類整理了許多java進階學習材料和BAT面試給熱愛IT行業的你,如果需要資料的請轉發此文章后再私聊小編回復【java】就能領取2019年java進階學習資料和BAT面試題以及《Effective Java》(第3版)電子版書籍。也可以加群:712263501領取海量學習資料進行學習。
總結
以上是生活随笔為你收集整理的MySQL面试题 | 附答案解析(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 下一站江湖洛阳字画商店在哪?
- 下一篇: 上海欢乐谷免费班车时间表