database concept

fiona8953發表於2017-09-14

填充因子只在建立索引時執行;索引建立後,當表中進行資料的新增、刪除或更新時,不會保持填充因子。即建立索引完後新增資料,比如新增”COM”,則會新增在Page100的”CON”的前面,此時Page100的剩餘空間將小於40%。因為充滿度只有60%,所以”Barr”和”CON”之間會有空隙,所以”COM”將直接插入他們之間,不會照成資料移動和頁分裂。如果充滿度是100%即整頁充滿資料,則會照成”CON”及它後面的資料都向後移動1位,然後在”CON”前面插入”COM”,而Page100會大約一半的行(後半部)移到新頁中以便為新行騰出空間(這種重組稱為頁拆分。頁拆分會降低效能並使表中的資料儲存產生碎片.),在這些移動的過程中一方面速度明顯下降,另一方面會產生碎片。新增完資料後要使填充因子繼續保持60%則需要重建索引。

填充因子大的時候,插入或修改記錄後重新索引的工作會很大,磁碟IO操作增加,效能必然降低,但其佔用空間小.填充因子小的時候,索引檔案佔用磁碟及記憶體空間相對要大,但是,系統本身重新索引所需IO操作減少,效能提高,只是多佔用一些儲存空間. 孰輕孰重要自已決定。

聚簇索引和非聚簇索引的區別就是:聚簇索引的資料物理儲存順序和索引順序一致的,也就是它的資料就是按順序排下來的。非聚簇索引的資料儲存是無序的,不按索引順序排列。

再看圖B,它是把這個索引列的資料複製了一份然後按順序排下來,再建立索引。每行資料都有一個指標。

<p style="margin:10px auto;font-family:"font-size:14px;white-space:normal;background-color:#FFFFFF;"> 我們再來找”Rudd”.首先從索引頁的根開始找,查詢原理跟聚集索引是一樣的。在索引頁的Page61找到”Rudd”,它的指標是470501,然後在資料頁的Page5找到470501,這個位置就是”Rudd”在資料庫中的實際位置,這樣就找到了”Rudd”。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26477398/viewspace-2144982/,如需轉載,請註明出處,否則將追究法律責任。

相關文章