索引在mysql中也叫做鍵(key),是存儲引擎用于快速找到記錄的一種數(shù)據(jù)結(jié)構(gòu)。
索引的作用:加速查詢操作;副作用:降低寫操作性能;
索引常見的兩種數(shù)據(jù)結(jié)構(gòu)類型:
1.B-Tree索引:它就是傳統(tǒng)意義上的索引,它是最常用、最有效的索引。
2.哈希索引:哈希索引是一種自適應(yīng)的索引,數(shù)據(jù)庫會根據(jù)表的使用情況自動生成哈希索引,我們?nèi)藶槭菦]辦法干預(yù)的。
B-Tree索引
大多數(shù)mysql引擎都支持這種索引;
- B-Tree通常意味著所有的值都是按順序存儲的,
- 并且每一個葉子頁到根的距離相同;
B-Tree(M=4)
B-Tree(M=4,依次插入1~6)
存儲引擎不需要進行全表掃描來獲取需要的數(shù)據(jù),取而代之是從索引的根節(jié)點開始進行搜索;
適用于:
- 全鍵值查找(全值匹配)
- 鍵值范圍(若是有多列的合并索引,需要精確匹配某一列并范圍匹配另一列)
- 鍵前綴查找
- 按順序查找(orderby)
限制:
- 如果不是按照索引的最左列開始查找,則無法使用索引
- 不能跳過索引中的列
- 如果查詢中有某個列的范圍查詢,其右邊的所有列都無法使用索引優(yōu)化查詢
哈希索引
在mysql中,只有memory引擎顯式支持哈希索引;基于哈希表實現(xiàn),只有精確匹配索引所有列的查詢才有效;對于每一行數(shù)據(jù),存儲引擎會對所有的索引列計算一個哈希碼,不同的鍵值行計算出的哈希碼不一樣,哈希索引將所有的哈希碼存儲在索引中,同時在哈希表中保存指向每個數(shù)據(jù)行的指針;(hash索引結(jié)構(gòu):hash值:指針)
優(yōu)勢:查找速度非???/p>
限制:
- 無法用于排序
- 不支持部分索引列匹配查找
- 只支持等值比較查詢
索引優(yōu)點:
- 降低需要掃描的數(shù)據(jù)量,根據(jù)索引定位資源,減少IO次數(shù);
- 可以幫助避免排序操作,因為索引本身就是根據(jù)順序存放的,避免使用臨時表;
- 幫助將隨機IO轉(zhuǎn)為順序IO,提示系統(tǒng)性能;
索引的缺點
- 第一,創(chuàng)建索引和維護索引要耗費時間,這種時間隨著數(shù)據(jù)量的增加而增加。
- 第二,索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。
- 第三,當對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)的維護,這樣就降低了數(shù)據(jù)的維護速度。
哪些情況需要加索引?
- 在經(jīng)常需要搜索的列上,可以加快搜索的速度;
- 在作為主鍵的列上,強制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);
- 在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
- 在經(jīng)常需要根據(jù)范圍進行搜索的列上創(chuàng)建索引,因為索引已經(jīng)排序,其指定的范圍是連續(xù)的;
- 在經(jīng)常需要排序的列上創(chuàng)建索引,因為索引已經(jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
- 在經(jīng)常使用在WHERe子句中的列上面創(chuàng)建索引,加快條件的判斷速度。
以上就是長沙達內(nèi)教育java培訓(xùn)機構(gòu)小編分享的“Java常見面試題—數(shù)據(jù)庫索引詳解”的內(nèi)容,希望對大家有幫助,更多java面試題請繼續(xù)關(guān)注長沙達內(nèi)教育java培訓(xùn)機構(gòu)官網(wǎng),每天會精彩內(nèi)容分享與你。
相關(guān)java面試題推薦
2019最新最全java面試題及答案:http://www.bjpowernode.com/tutorial_baseinterviewquestions/
Java常見面試題匯總:http://www.bjpowernode.com/javazixun/1007.html
2019最新java面試題含答案(基礎(chǔ)篇):http://www.bjpowernode.com/javazixun/1145.html
各大互聯(lián)網(wǎng)公司Java面試題匯總:http://www.bjpowernode.com/javazixun/1867.html
2019最新Java常見面試題(附帶答案):http://www.bjpowernode.com/javazixun/891.html
常被問到的Java面試題(帶全部答案):http://www.bjpowernode.com/javazixun/886.html
Java筆試題