對於每個結點,主要包含一個關鍵字數組Key[],一個指針數組(指向兒子)Son[]。在B-Tree內,查找的流程是:使用順序查找(數組長度較短時)或折半查找方法查找Key[]數組,若找到關鍵字K,則返回該結點的地址及K在Key[]中的位置;否則,可確定K在某個Key[i]和Key[i+1]之間,則從Son[i]所指的子結點繼續查找,直到在某結點中查找成功;或直至找到葉結點且葉結點中的查找仍不成功時,查找過程失敗。
接着,我們使用以下圖片演示如何生成B-Tree(M=4,依次插入1~6):
從圖可見,當我們插入關鍵字4時,由於原結點已經滿了,故進行分裂,基本按一半的原則進行分裂,然後取出中間的關鍵字2,升級(這裏是成爲根結點)。其它的依類推,就是這樣一個大概的過程。
A)索引可以避免全表掃描。多數查詢可以僅掃描少量索引頁及數據頁,而不是遍歷所有數據頁。
B)對於非聚集索引,有些查詢甚至可以不訪問數據頁。
C)聚集索引可以避免數據插入操作集中於表的最後一個數據頁。
D)一些情況下,索引還可用於避免排序操作。
當然,衆所周知,雖然索引可以提高查詢速度,但是它們也會導致數據庫系統更新數據的性能下降,因爲大部分數據更新需要同時更新索引。
2.索引的存儲
一條索引記錄中包含的基本信息包括:鍵值(即你定義索引時指定的所有字段的值)+邏輯指針(指向數據頁或者另一索引頁)。
(三)什麼是事務?
事務(Transaction)是併發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。事務是數據庫維護數據一致性的單位,在每個事務結束時,都能保持數據一致性。
(四)數據庫的樂觀鎖和悲觀鎖是什麼?
數據庫管理系統(DBMS)中的併發控制的任務是確保在多個事務同時存取數據庫中同一數據時不破壞事務的隔離性和統一性以及數據庫的統一性。
樂觀併發控制(樂觀鎖)和悲觀併發控制(悲觀鎖)是併發控制主要採用的技術手段。
- 悲觀鎖:假定會發生併發衝突,屏蔽一切可能違反數據完整性的操作
- 樂觀鎖:假設不會發生併發衝突,只在提交操作時檢查是否違反數據完整性。
(五) 使用索引查詢一定能提高查詢的性能嗎?爲什麼
通常,通過索引查詢數據比全表掃描要快.但是我們也必須注意到它的代價.
索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味着每條記錄的INSERT,DELETE,UPDATE將爲此多付出4,5 次的磁盤I/O. 因爲索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢性能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種情況:
- 基於一個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%
- 基於非唯一性索引的檢索
(六)簡單說一說drop、delete與truncate的區別
SQL中的drop、delete、truncate都表示刪除,但是三者有一些差別
- delete和truncate只刪除表的數據不刪除表的結構
-
速度,一般來說: drop> truncate >delete
-
delete語句是dml,這個操作會放到rollback segement中,事務提交之後才生效;
如果有相應的trigger,執行的時候將被觸發. truncate,drop是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger.
(七)drop、delete與truncate分別在什麼場景之下使用?
- 不再需要一張表的時候,用drop
- 想刪除部分數據行時候,用delete,並且帶上where子句
- 保留表而刪除所有數據的時候用truncate
(八) 超鍵、候選鍵、主鍵、外鍵分別是什麼?
超鍵:在關係中能唯一標識元組的屬性集稱爲關係模式的超鍵。一個屬性可以爲作爲一個超鍵,多個屬性組合在一起也可以作爲一個超鍵。超鍵包含候選鍵和主鍵。
候選鍵:是最小超鍵,即沒有冗餘元素的超鍵。
主鍵:數據庫表中對儲存數據對象予以唯一和完整標識的數據列或屬性的組合。一個數據列只能有一個主鍵,且主鍵的取值不能缺失,即不能爲空值(Null)。
外鍵:在一個表中存在的另一個表的主鍵稱此表的外鍵。
(九)什麼是視圖?以及視圖的使用場景有哪些?
視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數據更容易,相比多表查詢。
- 只暴露部分字段給訪問者,所以就建一個虛表,就是視圖。
- 查詢的數據來源於不同的表,而查詢者希望以統一的方式查詢,這樣也可以建立一個視圖,把多個表查詢結果聯合起來,查詢者只需要直接從視圖中獲取數據,不必考慮數據來源於不同表所帶來的差異