通過前面一些對數據庫文章的介紹,想必你也應該對數據庫有了初步的了解。而數據庫的幾大檢索方法今天想要和大家具體介紹介紹。堆、簇索引、非簇索引可能大家和小編一樣陌生。不同的索引有著不同的特點。以及不同的優缺點。在使用不同的軟件時,會有不同的檢索方式所使用。在這個瞬息萬變的時代背景下,數據庫也在馬不停蹄地更新以及發揮它獨特的價值和作用。
一、堆
1、sqlserver在sysindexes表中查到對應的數據行
2、讀取indid值(應為堆沒有索引所以是0)后,sqlserver開始讀取firstIAM值,獲取堆的IAM的第一頁(8KB)的位置。(IAM將堆的各個區域聯接在一起)
3、sqlserver根據IAM提供的區域地址,一個區域一個區域的查找,一個數據頁一個數據頁的查找,直到獲取所需的數據為止。
二、簇索引
1、sqlserver在sysindexes表中查到對應的數據行,找到indid為1后,sqlserver開始讀取root列的值。(列值是根頁面的地址)
2、找到根頁面后開始搜索,比如要搜索的表是10條記錄一頁,這里是找“1981”這個值,將索引的值“1981”與根頁面的索引比較。由于“1981”是在1900到2000之間。所以sqlserver開始搜索1900所在的中間頁。
3、找到“1900”所在的中間頁后,將索引值“1981”繼續與中間頁的索引比較,由于“1981”是在1980到1990之間。所以sqlserver開始搜索1980所在的數據頁。(注意這一步是根據中間頁找數據頁)
4、找到“1980”所在的數據頁后,將索引值“1981”繼續與數據頁的索引比較,很快就可以在這個數據頁上找到“1981”的數據行了。
三、非簇索引
1、sqlserver在sysindexes表中查到對應的數據行,找到indid為后,值為2到251后,sqlserver開始讀取root列值。
2、找到根頁面后,將“1981”與根頁面的索引比較,由于“1981”是在1900到2000之間。所以sqlserver開始搜索1900所在的中間頁。(注意這一步是根據中間頁找葉頁面)
3、找到中間頁后,將索引值“1981”繼續與中間頁的索引比較,由于“1981”是在1980到1990之間。所以sqlserver開始搜索1980所在的葉頁面。
4、找到“1980”所在的葉頁面后,繼續叫索引值“1981”與葉頁面上的關鍵字比較,在葉頁面上找到關鍵字為“1981”的數據行ID。
5、根據數據行ID提供的數據頁和數據行信息,定位到指定的數據頁和數據行,找到“1981”這條記錄是“晶”的。
學海無涯苦作舟,不進則退。計算機行業有許多東西都是值得我們去了解和挖掘的。想要了解更多數據庫的信息,請繼續關注中培偉業。