什么表可以隨機訪問,為什么使用多級頁表

順序表是存儲位置相鄰連續的,可以隨即訪問的一種數據結構;鏈表是通過指針來描述元素關系的一種數據結構 。運算時間的不同順序表是一種隨機存取結構,便于元素的隨機訪問,因此對于只進行查找的運算而很少做到插入和刪除運算的應用,宜采用順序表;鏈表是一種非隨機存取結構,對任一結點的操作都必須是從頭指針開始順著鏈掃描才能取得 。
順序表和鏈表的異同點有哪些?

什么表可以隨機訪問,為什么使用多級頁表


順序表是存儲位置相鄰連續的,可以隨即訪問的一種數據結構;鏈表是通過指針來描述元素關系的一種數據結構 。相同點都是線性表,是n個數據特性相同的元素組成的有限序列 。存儲空間的不同順序表的存儲空間是靜態的,要求預先分配空間;鏈表的存儲空間是動態分配的,只要是有內存空間,就可動態申請空間 。運算時間的不同順序表是一種隨機存取結構,便于元素的隨機訪問,因此對于只進行查找的運算而很少做到插入和刪除運算的應用,宜采用順序表;鏈表是一種非隨機存取結構,對任一結點的操作都必須是從頭指針開始順著鏈掃描才能取得 。
多表連接查詢和多次單表查詢哪個效率高?為什么?
什么表可以隨機訪問,為什么使用多級頁表


如果數據量小的表,這樣的設計意義不大,而且當然是單表速度快 。若在大數據量情況下,設計非常有意義 。在多表連接中注意數據的條目和外健,避免出行大量冗余數據導致性能下降 。下面我以Oracle講講數據查詢的整個過程技術 。由于數據分布到數據塊,在大量數據設計中可以將數據存儲于多個數據塊,在高并發進程的隨機訪問的情況下,能有效減少塊沖突 同樣的數據需要更多的數據塊來存儲,由于數據塊的塊頭元信息大小固定,所以需要更多的空間來存儲塊頭元信息 。
行長度過大容易導致行連接,從而導致Oracle獲取數據塊的效率降低 ,在行長度固定的前提下,單塊能夠存儲更多的數據行,也就意味著Oracle一次I/O能讀取更多的數據行 。適合連續順序讀或者存放大對象數據(如LOB數據) 由于大數據塊可以存放更多的索引葉節點信息,容易引起爭用,所以大數據塊不適合存放索引葉節點信息 。
大量數據表的數據庫參數設置DB_FILE_MULTIBLOCK_READ_COUNT表示Oracle一次順序I/O讀操作最多能讀取的數據塊塊數 。該參數的默認值隨操作系統的不同而不同 。在全表掃描或者索引快速掃描比較多的系統中(如DSS系統),建議將該值設置得較大 。但是DB_FILE_MULTIBLOCK_READ_COUNT參數受操作最大單次I/O大小的限制,大多數操作系統單次讀操作的大小不能超過1MB,這也就意味著在8KB數據塊大小的情況下,該參數最大值為128 。
【什么表可以隨機訪問,為什么使用多級頁表】值得一提的是,該參數的大小還會影響Oracle CBO對執行計劃的評估,如果設成較大值,Oracle的執行計劃傾向于全表掃描 。當該參數設置為0或者保持默認時,CBO假設全表掃描時最多能連續讀取8個數據塊 。從Oracle 11R2開始,DB_FILE_MULTIBLOCK_READ_COUNT的取值算法如下:db_file_multiblock_read_count = min(1048576/db_block_size , db_cache_size/(sessions * db_block_size))注意 數據庫參數BLOCK_SIZE在設定之后,在數據庫生命周期內不可更改 。

    推薦閱讀