資料庫學習(1)

2021-12-29 21:06:08 字數 3643 閱讀 1363

資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢、更新資料庫表中資料。索引的實現通常使用b樹及其變種b+樹。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。

為表設定索引要付出代價的:一是增加了資料庫的儲存空間,二是在插入和修改資料時要花費較多的時間(因為索引也要隨之變動)。

建立索引可以大大提高系統的效能

1. 通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。

2. 可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。

3. 可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。

4. 在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。

5. 通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。

增加索引也有許多不利的方面

1. 建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加

2. 索引需要佔物理空間,除了資料表佔資料空間之外,每乙個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。

3. 當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。

資料庫索引型別

邏輯上:

single column 單行索引

concatenated 多行索引

unique 唯一索引

nonunique 非唯一索引

function-based函式索引

domain 域索引

物理上:

partitioned 分割槽索引

nonpartitioned 非分割槽索引

b-tree:

normal 正常型b樹

rever key 反轉型b樹

bitmap 位圖索引

聚集索引結構

在 sql server 中,索引是按 b 樹結構進行組織的。聚集索引單個分割槽中的結構:

聚集索引(clustered index)特點

1. 聚集索引的葉節點就是實際的資料頁

2. 聚集索引中的排序順序僅僅表示資料頁鏈在邏輯上是有序的。而不是按照順序物理的儲存在磁碟上

3. 行的物理位置和行在索引中的位置是相同的

4. 每個表只能有乙個聚集索引

5. 聚集索引的平均大小大約為表大小的5%左右

非聚集索引結構

非聚集索引與聚集索引具有相同的 b 樹結構,它們之間的顯著差別在於以下兩點:

1. 基礎表的資料行不按非聚集鍵的順序排序和儲存。

2. 非聚集索引的葉層是由索引頁而不是由資料頁組成。

我們有一本漢語字典,可以把它的正文本身看做是乙個聚集索引,它是按照漢字拼音的開頭字母排序的,不再需要查詢其他目錄。當遇到不認識的字時,需要結合「部首目錄」和「檢字表」, 先找到目錄中的結果,然後再翻到您所需要的頁碼。通過這種方法查到的目錄中字的排序並不是真正的正文的排序方法。把這種看做是乙個非聚集索引。

非聚集索引 (unclustered index) 特點

1. 非聚集索引的頁,不是資料,而是指向資料頁的頁。

2. 若未指定索引型別,則預設為非聚集索引。

3. 葉節點頁的次序和表的物理儲存次序不同

4. 每個表最多可以有249個非聚集索引

5. 在非聚集索引建立之前建立聚集索引(否則會引發索引重建)

使用索引的代價

1. 索引需要占用資料表以外的物理儲存空間

2. 建立索引和維護索引要花費一定的時間

3. 當對表進行更新操作時,索引需要被重建,這樣降低了資料的維護速度。

例項

use studentsdb

set statistics io on

set statistics time on

use studentsdb

select * from emp_pay where employeeid=5

掃瞄計數 1,邏輯讀取 1 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0

無索引查詢

索引查詢

表 『emp_pay』。掃瞄計數 0,邏輯讀取 2 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。

索引為一種特殊的目錄。微軟的sql server提供了兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。下面,我們舉例來說明一下聚集索引和非聚集索引的區別:

其實,我們的漢語字典的正文本身就是乙個聚集索引。比如,我們要查「安」字,就會很自然地翻開字典的前幾頁,因為「安」的拼音是「an」,而按照拼音 排序漢字的字典是以英文本母「a」開頭並以「z」結尾的,那麼「安」字就自然地排在字典的前部。如果您翻完了所有以「a」開頭的部分仍然找不到這個字,那 麼就說明您的字典中沒有這個字;同樣的,如果查「張」字,那您也會將您的字典翻到最後部分,因為「張」的拼音是「zhang」。也就是說,字典的正文部分 本身就是乙個目錄,您不需要再去查其他目錄來找到您需要找的內容。我們把這種正文內容本身就是一種按照一定規則排列的目錄稱為「聚集索引」。

如果您認識某個字,您可以快速地從自動中查到這個字。但您也可能會遇到您不認識的字,不知道它的發音,這時候,您就不能按照剛才的方法找到您要查的 字,而需要去根據「偏旁部首」查到您要找的字,然後根據這個字後的頁碼直接翻到某頁來找到您要找的字。但您結合「部首目錄」和「檢字表」而查到的字的排序 並不是真正的正文的排序方法,比如您查「張」字,我們可以看到在查部首之後的檢字表中「張」的頁碼是672頁,檢字表中「張」的上面是「馳」字,但頁碼卻 是63頁,「張」的下面是「弩」字,頁面是390頁。很顯然,這些字並不是真正的分別位於「張」字的上下方,現在您看到的連續的「馳、張、弩」三字實際上 就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的對映。我們可以通過這種方式來找到您所需要的字,但它需要兩個過程,先找到目錄中的結 果,然後再翻到您所需要的頁碼。我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為「非聚集索引」。

每個表只能有乙個聚集索引,因為目錄只能按照一種方法進行排序。

資料庫學習1

今天是學習資料庫的第一天,感覺和學c的這個時候的感覺一樣,還不是很了解這塊,太多的疑惑。我想這些後邊會慢慢的懂的。簡單的列下今天的知識。第一章 關係型資料庫管理系統 使用資料庫的優點 1 減低儲存資料的冗餘度 2 提供更高的資料一致性 3 資料共享 4,便於維護資料完整性 5,能夠實現資料的安全性。...

資料庫學習(1)

一 初始mysql 個人對庫和表的大概的見解 二 庫操作 drop 代表刪除 use 代表進入 建立庫 create database 庫名 刪除庫 drop database 庫名 進入庫 use 庫名 檢視當前進入的是哪個庫 select database 三 表操作 insert into 代...

oracle資料庫學習1

前面已經寫完如何安裝oracle資料庫了,下面就是介紹一下如何學習oracle資料庫進行學習了。一 判斷資料庫是否進行啟動 oracle zjk ps ef grep ora oracle 1869 1 0 23 14 00 00 00 ora pmon ora138 oracle 1871 1 0...