『壹』 紅黑樹,b+樹分別用於什麼場景,為什麼
紅黑樹屬於「黑平衡」的二叉樹,雖然犧牲了一定的平衡性,但是add、remove操作要由優於AVL樹也就是說RB-Tree的「統計性能」更佳!Java中TreeSet,TreeMap的底層都是基於RedBlackTree紅黑樹的;
B+樹主要用在文件系統以及資料庫做索引。比如磁碟存儲、文件系統、MySQL資料庫
『貳』 資料庫中索引的結構和什麼情況下不適合建索引
1>資料庫中索引的結構是一種排序的數據結構。
2>資料庫索引是通過B樹和變形的B+樹實現的。
3>什麼情況下不適合建立索引?
1.對於在查詢過程中很少使用或參考的列,不應該創建索引。
2.對於那些只有很少數據值的列,不應該創建索引。
3.對於那些定義為image,text和bit數據類型的列,不應該創建索引。
4.當修改性能遠大於檢索性能,不應該建立索引。
4>建立索引的優點?
1.通過創建唯一性的索引,可以保證表中每一行數據的唯一性;
2.可以大大加快表中數據的檢索素的,這也是創建索引的主要原因;
3.可以加快表與表之間的鏈接,特別是在實現表與表之間的參考完整性實現有特別的意義;
4.通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統性能。
5>建立索引的缺點?
1.創建索引和維護索引耗時,時間隨著數據的增加而增加,成正比;
2.索引需要佔物理空間,除了數據表占數據空間外,每一個索引還要佔一定的物理空間,如果建立聚簇索引,佔得物理空間會更大;
3.當對表中的數據進行維護時,對索引也要進行維護,這樣就降低了數據的維護速度。
可以在資料庫中建立三種索引:唯一索引,主鍵索引,聚集索引。
唯一索引(unique) :不允許任意兩行具有相同索引值的索引。
主鍵索引(primary):數據表中經常有一列或多列組合,其職唯一標識要求主鍵中的每表中的每一行,則該列稱為主鍵。個值都是唯一的,當查詢時使用主鍵索引,他還允許對數據的快速訪問。
聚集索引():表中行的物理順序和表中的邏輯順序相同。一個標志能有一個聚集索引。
如果一個索引不是聚集索引,則表中的數據的物理順序和表中的邏輯順序不相同。
『叄』 資料庫索引的底層實現是什麼數據結構
關於資料庫索引的數據結構,大多數資料庫都是採用B樹。可參照文章:
http://blog.csdn.net/Ant_Yan/archive/2008/09/15/2932068.aspx
非主鍵索引需要在數據表本身的存儲空間外額外開銷存儲空間,所以在更新的時候可能不僅要更新數據表本身,還要更新非主鍵索引,更新內容更多了,所以導致速度降低。反過來,如果數據表中的數據按照主鍵索引的順序存儲,更新的時候就沒有額外的開銷。
非主鍵索引對提高查詢速度來講,主要的方面是:檢索的條件(where...)如果命中對應的非主鍵索引的話,就不需要對數據表做全表掃描,效率肯定是大大提高。(索引的創建和使用是資料庫設計和優凳租租化的重要部分,是一型漏個資料庫程序員的必修課,不同資料庫系統的語法不同,但是原理基本相同);
另一方面,也有如下的可能:如果檢索棗兆結果的欄位包含在非主鍵索引中,即使對非主鍵索引做全掃描,也比對整表欄位做全掃描快,因為只有非主鍵索引本身的數據需要從存儲設備調入內存,節約了IO時間。
不過一般說索引對查詢速度的影響,主要指第一種情況。