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