是什麼影響了資料庫索引選型?

2022-08-02 07:30:09 字數 3822 閱讀 4995

主存訪問原理

主存的構成

主儲存器(簡稱主存或記憶體)包括訪問體、各種邏輯部件及控制電路等。儲存體由許多儲存單元組成,每個儲存單元又包含若干個儲存元件,每個儲存元件能寄存一位二進位制**「0」或「1」。這樣,乙個儲存單元可以儲存一串二進位制**,這串二進位制**稱為儲存字,這串二進位制**的位數稱為儲存字長,可以是8位、16位或者32位等。

主存與cpu的聯絡

mar(memory address register)是儲存器位址暫存器,用來存放欲訪問的儲存單元的位址,其位數對應儲存單元的個數(若mar為10位,則有210=1024個儲存單元,記為1k)。

mdr(memory data register)是儲存器資料暫存器,用於存放從儲存體某單元取出的**或準備往某儲存單元存入的**,其位數與儲存字長相等。

現代計算機一般將mar和mdr整合在cpu晶元中。

主存的訪問過程

如果把儲存體看做是一棟大樓,那麼每個儲存單元可以看成這棟大樓裡的每個房間,每個儲存元可以看做房間裡的一張床位,床位有人相當於「1」,無人相當於「0」。每個房間都需要乙個房間號,便於我們找到房間的位置。同樣,可以賦予每個儲存單元乙個編號,稱為儲存單元的位址號

主存的工作方式就是按照儲存單元的位址號來實現對儲存字各位的存(寫入)、取(讀出)。

現代主存的結構和訪問原理比較複雜,這裡拋卻具體差別,抽象出乙個十分簡單的訪問模型來說明主存的工作原理。

主存的訪問過程如下:

當系統需要讀取主存時,首先由cpu將該字的位址送到mar,經位址匯流排送至主存,然後發出讀命令。主存接到讀命令後,根據位址定位到指定儲存單元,然後將此儲存單元資料放到資料匯流排上,供其它部件讀取。

寫主存的過程類似,若要向主存存入乙個資訊字時,首先cpu將該字要存入的主存單元的位址經mar送到位址匯流排,並將資訊字送入mdr,然後向主存發出寫命令,主存接到寫命令後,便將資料匯流排上的資訊寫入到對應位址匯流排指出的主存單元中。

磁碟訪問原理

我們知道,索引本身也很大,不可能全部儲存在記憶體中(根節點常駐記憶體),一般以檔案形式儲存在磁碟上。那麼問題來了,索引檢索需要磁碟i/o操作。與記憶體不同,磁碟i/o存在機械運動耗費,相對於記憶體訪問,i/o訪問的消耗要高幾個數量級。

磁碟的構成

磁碟的整體結構示意圖:

乙個磁碟由大小相同且同軸的圓形碟片組成,磁碟可以轉動(各個磁碟必須同步轉動)。在磁碟的一側有磁頭支架,磁頭支架固定了一組磁頭,每個磁頭負責訪問乙個磁碟的內容。磁頭不能轉動,但是可以沿磁碟半徑方向運動(實際是斜切向運動),每個磁頭同一時刻也必須是同軸的,即從正上方向下看,所有磁頭任何時候都是重疊的。

磁碟碟片示意圖:

碟片被劃分成一系列同心環,圓心是碟片中心,每個同心環叫做乙個磁軌,所有半徑相同的磁軌組成乙個柱面。磁軌被沿半徑線劃分成乙個個小的段,每個段叫做乙個扇區,每個扇區是磁碟的最小儲存單元。

磁碟的訪問過程:

當需要從磁碟讀取資料時,系統會將資料邏輯位址傳給磁碟,磁碟的控制電路按照定址邏輯將邏輯位址翻譯成實體地址,即確定要讀的資料在哪個磁軌,哪個扇區。

為了讀取這個扇區的資料,需要將磁頭放到這個扇區上方,為了實現這一點:

首先必須找到柱面,即磁頭需要移動對準相應磁軌,這個過程叫做尋道,所耗費時間叫做尋道時間

然後目標扇區旋轉到磁頭下,即磁碟旋轉將目標扇區旋轉到磁頭下。這個過程耗費的時間叫做旋轉時間

所以一次訪盤請求(讀/寫)完成過程由三個動作組成:

尋道(時間):磁頭移動定位到指定磁軌

旋轉延遲(時間):等待指定扇區從磁頭下旋轉經過

資料傳輸(時間):資料在磁碟與記憶體之間的實際傳輸

區域性性原理與磁碟預讀

由於儲存介質的特性,磁碟本身訪問就比主存慢很多,再加上機械運動耗費,磁碟的訪問速度往往是主存的幾百萬分之一,因此為了提高效率,要儘量減少磁碟i/o。為了達到這個目的,磁碟往往不是嚴格按需讀取,而是每次都會預讀,即使只需要乙個位元組,磁碟也會從這個位置開始,順序向後讀取一定長度的資料放入記憶體。這樣做的理論依據是電腦科學中著名的區域性性原理:

區域性性原理: cpu訪問儲存器時,無論是訪問指令還是訪問資料,所訪問的儲存單元都趨於聚集在乙個較小的連續區域中。

時間區域性性(temporal locality):如果乙個資訊項正在被訪問,那麼在近期它很可能還會被再次訪問。

由於磁碟順序讀取的效率很高(不需要尋道時間,只需很少的旋轉時間),因此對於具有區域性性的程式來說,預讀可以提高i/o效率

預讀的長度一般為頁(page)的整倍數。頁是計算機管理儲存器的邏輯塊,硬體及作業系統往往將主存和磁碟儲存區分割為連續的大小相等的塊,每個儲存塊稱為一頁(在許多作業系統中,頁的大小通常為4k),主存和磁碟以頁為單位交換資料。當程式要讀取的資料不在主存中時,會觸發乙個缺頁異常,此時系統會向磁碟發出讀盤訊號,磁碟會找到資料的起始位置並向後連續讀取一頁或幾頁載入記憶體中,然後異常返回,程式繼續執行。

資料庫為什麼選用b-/+tree索引

之前提到過,sql優化的乙個重要原則是減少磁碟i/o次數,磁碟i/o次數也是評價索引結構的優劣的指標之一。

b-tree分析:

根據b-tree的定義,可知檢索一次最多需要訪問h(b-tree的高度)個節點。資料庫系統的設計者巧妙利用了磁碟預讀原理,將乙個節點的大小設為等於乙個頁,這樣每個節點只需要一次i/o就可以完全載入。但是邏輯上儲存在乙個頁裡並不代表物理上也儲存在乙個頁裡,為了達到這個目的,每次新建節點時,直接申請乙個頁的空間,這樣就保證乙個節點物理上也儲存在乙個頁裡,加之計算機儲存分配都是按頁對齊的,就實現了乙個節點只需一次i/o。

b-tree中一次檢索最多需要h-1次i/o,因為根節點會常駐記憶體。複雜度為o(logdn)。一般實際應用中,出度d是非常大的數字,通常超過100,因此h非常小(通常不超過3)。所以b-tree作為索引結構效率是非常高的。這也是為什麼資料庫不選用紅黑樹作為索引(資料結構)的原因,一是因為紅黑樹的高度h要大的多;二是紅黑樹節點在物理上可能是單獨儲存的,無法利用區域性性原理。複雜度為o(h),效率明顯比b-tree差的多。

b+tree分析:

上b+tree更適合索引。究其原因,一是因為b+tree內節點去掉了data域,因此可以擁有更大的出度,擁有更好的效能;二是因為所有葉子節點形成有序鍊錶,便於範圍查詢;所有的查詢最終都會到葉子節點,從而保證了查詢效能的穩定

什麼影響了資料庫查詢速度

qps queries per second意思是 每秒查詢率 是一台伺服器每秒能夠相應的查詢次數,是對乙個特定的查詢伺服器在規定時間內所處理流量多少的衡量標準。tps 是transactionspersecond的縮寫,也就是事務數 秒。它是軟體測試結果的測量單位。客戶機在傳送請求時開始計時,收到...

是什麼影響了諾基亞E62

這幾天一直在關注push mail和黑莓。發現exchange自帶的microsoft direct push非常的好。這樣就不再需要向中國移動支付push mail的費用,僅僅需要支付grps的費用即可。而黑莓呢?每月398,只含50m,太貴了吧!但是,microsoft direct push和...

是什麼影響了MID的銷售票房

公尺度網 2008年4月英特爾idf技術峰會舉行,mobile internet device 移動網際網路裝置,簡稱mid 產品就進入了我們的視野,但是將近一年是市場銷售給我們的感覺來看,mid似乎並沒有年初預期的那麼好,mid在國內市場的品牌也寥寥無幾,目前我們能看到最多的是愛國者mid 還有聯...