Mysql和ORACLE索引的實現方式

來源:互聯網
上載者:User

標籤:為什麼   記憶體   oracle   innodb   地址   固定   blog   需要   資料庫系統   

B-Tree和B+Tree

目前大部分資料庫系統及檔案系統都採用B-Tree或其變種B+Tree作為索引結構。

首先,對單個節點來說,是一個key value結構,key是作引的列,value有兩種,對於聚簇索引來說,value就是資料,對於二級索引來說,value就是指向資料的地址。

B-Tree的結構如下:

B-tree的特點是非葉子節點上也有資料。

B+Tree是B-Tree的變體,它的結構如下:

非葉子節點的職責就是為了定位下級節點的區間,不需要儲存資料。資料全部分散在葉子結點上。

B+Tree索引的優勢:

由於非葉子節點不存放資料,所以可以將非葉子節點定義為固定的區間,然後可以設計每個區間的葉子結點都存放在一片固定大小的連續的記憶體地區,在讀取的時候可以避免出現硬碟大量隨機讀的現象 。

Mysql中,不論是MyISAM還是InnoDB,都是使用的B+樹索引,不過InnoDB使用了聚簇索引,所以索引檔案和資料檔案是放在一塊的。MyISAM中,索引檔案和資料檔案是可以分開的。

瞭解不同儲存引擎的索引實現方式對於正確使用和最佳化索引都非常有協助,例如知道了InnoDB的索引實現後,就很容易明白為什麼不建議使用過長的字 段作為主鍵,因為所有輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。再例如,用非單調的欄位作為主鍵在InnoDB中不是個好主意,因為 InnoDB資料檔案本身是一顆B+Tree,非單調的主鍵會造成在插入新記錄時資料檔案為了維持B+Tree的特性而頻繁的分裂調整,十分低效,而使用 自增欄位作為主鍵則是一個很好的選擇

 

ORACLE的索引是B-tree索引。

Mysql和ORACLE索引的實現方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.