設計表結構的時候會用到。(面試中一般不會涉及)
索引是對資料庫表中乙個或多個列的值進行排序的資料結構,以協助快速查詢、更新資料庫表中資料。
索引的實現通常使用b_tree及其變種。索引加速了資料訪問,因為儲存引擎不會再去掃瞄整張表得到需要的資料;相反,它從根節點開始,根節點儲存了子節點的指標,儲存引擎會根據指標快速尋找資料。
(4)檔案索引和資料庫索引為什麼使用b+樹?
檔案與資料庫都是需要較大的儲存,也就是說,它們都不可能全部儲存在記憶體中,故需要儲存到磁碟上。
而所謂索引,則為了資料的快速定位與查詢,那麼索引的結構組織要儘量減少查詢過程中磁碟i/o的訪問次數,因此b+樹相比b樹更為合適。
資料庫系統巧妙利用了區域性性原理與磁碟預讀原理,將乙個節點的大小設為等於乙個頁,這樣每個節點只需要一次i/o就可以完全載入,而紅黑樹這種結構,高度明顯要深的多,並且由於邏輯上很近的節點(父子)物理上可能很遠,無法利用區域性性。
最重要的是,b+樹還有乙個最大的好處:方便掃庫。b樹必須用中序遍歷的方法按序掃庫,而b+樹直接從葉子結點挨個掃一遍就完了,b+樹支援range-query非常方便,而b樹不支援,這是資料庫選用b+樹的最主要原因。
主鍵是一種特殊的唯一性索引,其可以是聚集索引,也可以是非聚集索引。
在sqlserver中,主鍵的建立必須依賴於索引,預設建立的是聚集索引,但也可以顯式指定為非聚集索引。
innodb作為mysql儲存引擎時,預設按照主鍵進行聚集,如果沒有定義主鍵,innodb會試著使用唯一的非空索引來代替。
如果沒有這種索引,innodb就會定義隱藏的主鍵然後在上面進行聚集。
所以,對於聚集索引來說,你建立主鍵的時候,自動就建立了主鍵的聚集索引。
事務是乙個不可分割的資料庫操作序列,也是資料庫併發控制的基本單位,其執行的結果必須使資料庫從一種一致性狀態變到另一種一致性狀態。
隔離級別決定了乙個session中的事務可能對另乙個session中的事務的影響。ansi標準定義了4個隔離級別,mysql的innodb都支援,分別是:
mysql預設的隔離級別是repeatable read。
mysql的事務支援不是繫結在mysql伺服器本身,而是與儲存引擎相關:
資料庫建立索引以及索引失效問題
運算元據庫索引能起到優化資料庫查詢,提高查詢效率的作用。並且對也稍微大一點的資料量的服務來說,索引的建立是必須的,也是關鍵的。但是索引也要合理應用,不要遇到查詢就建索引,也不能亂建。如果造成索引失效那還不如不建。索引失效有的時候是因為自己的語句問題造成的。下面是幾種造成索引失效的幾種原因,一 以下的...
資料庫索引以及exists,in的學習
本文分為兩個部分,第一部分是談聚簇索引和非聚簇索引,第二部分談sql中exists和in的用法 第一部分 首先這兩個都是索引,索引一般用在表中某些需要頻繁讀取的字段上,這是考慮到對錶的寫操作時要同時更新這些索引,有效能損耗。聚簇索引 如果有n條資料,就有n個索引項,以b 樹方式存在磁碟上。葉子節點存...
資料庫的優化之建立索引,以及SQL
在資料庫中,索引的含義與日常意義上的 索引 一詞並無多大區別 想想小時候查字典 它是用於提高資料庫表資料訪問速度的資料庫物件。a 索引可以避免全表掃瞄。多數查詢可以僅掃瞄少量索引頁及資料頁,而不是遍歷所有資料頁。b 對於非聚集索引,有些查詢甚至可以不訪問資料頁。c 聚集索引可以避免資料插入操作集中於...