為什麼要使用索引?使用索引有什麼優點和缺點?
使用索引是為了使我們查詢變得更快。使用索引如果我們對資料進行修改或者刪除那麼他的索引也要隨之改變,所以使用索引就會降低我們修改刪除的效率。
mysql有幾種索引型別?
普通索引:這一類索引可以建立在任何資料型別中,沒有限制。
唯一索引:建立該類索引時,需要保證建立索引的那一列值是唯一的。
全文索引:全文索引只能建立在char,varchar,text型別的字段上,主要是為了提高查詢較大字串的查詢速度,只有myisam儲存引擎支援
單列索引:在表中給單個列建立索引,單列索引可以是普通索引,唯一索引,全文索引
多列索引:在同一張表的多個列上建立索引
索引為什麼會使查詢效率大大提高?
mysql預設使用的是b+樹的資料結構。
索引:排好序的資料結構,類似於書的目錄,我們可以通過一本書的目錄,快速查詢到我們需要的內容,而不需要一頁一頁的去檢視。
mysql索引資料結構為什麼要預設使用b+樹,而不使用其他的資料結構?
據我了解的資料結構有,二叉樹,紅黑樹,b樹,b+樹 (他們都有乙個共同的特點,就是右邊的資料一定都比左邊的小)
二叉樹:
以上兩組資料雖然數字是一樣的但是他們的順序不一樣,所以構建出來的二叉樹不一樣,通過上面這張圖可以看出來,如果如果資料是從大到小或者是從小到大的順序插入,這樣會導致二叉樹變為鍊錶資料結構,鍊錶查詢效率比較慢,而且如果當我們表中有幾百萬條資料的時候,這個數會變得很高,我們查詢的時候,每乙個節點都要進行一次io讀取,而這個效率肯定是不高的,所以不適用作為資料庫索引的資料結構。
紅黑樹(二叉平衡樹)
兩組同樣的資料用紅黑樹構建出來的結構不一樣,因為紅黑樹會自動平衡保證節點左右兩邊數量一樣,這樣就避免出現鍊錶那種情況了,但是當資料量多時查詢速度還是慢。
b樹
通過檢視上圖我們可以發現b樹的特點是他每乙個節點可以儲存多個元素,在同樣的資料下我們使用b樹構建的資料結構就沒有紅黑樹構建資料結構那麼高了,可能有人會問為什麼不把全部資料放在乙個節點中,這樣讀取一次不就行了嗎?可是電腦的記憶體是有限的,如果一次讀取太多會造成記憶體溢位,mysql預設每乙個節點儲存16kb大小。
b+樹
b+樹是通過b樹改造而來的,他和b樹有什麼不同呢 ?
1.b+樹有重複的索引
2.b+樹葉子節點都記錄著右邊的葉子節點
b+樹為什麼會有重複索引?
b+樹葉子節點為什麼都記錄著右邊的葉子節點?
當在進行範圍查詢時,只需要第一次從根節點往下面查,然後再根據葉子節點記錄著右邊的葉子節點的這一特性,快速的查詢到,指定範圍的值。
MySQL索引原理之索引原理
索引定義 是儲存引擎用於快速查詢記錄的一種資料結構。需要額外開闢空間和資料維護工作。索引是物理資料頁儲存,在資料檔案中 innodb,ibd檔案 利用資料頁 page 儲存。索引可以加快檢索速度,但是同時也會降低增刪改操作速度,索引維護需要代價。索引涉及的理論知識 二分查詢法 hash和b tree...
mysql索引 mysql索引實現原理
什麼是索引 索引是一種高效獲取資料的儲存結構,例 hash 二叉 紅黑。mysql為什麼不用上面三種資料結構而採用b tree 若僅僅是 select from table where id 45 上面三種演算法可以輕易實現,但若是select from table where id 6 就不好使了...
mysql 索引原理
b樹 b樹高度 資料庫為什麼使用這種結構?一般來說,索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存的磁碟上。這樣的話,索引查詢過程中就要產生磁碟i o消耗,相對於記憶體訪問,i o訪問的消耗要高幾個數量級,所以評價乙個資料結構作為索引的優劣最重要的指標就是在查詢過程中磁碟...