創(chuàng )建一個(gè)表時(shí)表中列的順序對性能有什么影響?

4年前 (2020-12-27)閱讀625回復0
訪(fǎng)客
訪(fǎng)客
  • 管理員
  • 發(fā)消息
  • 注冊排名3
  • 經(jīng)驗值65770
  • 級別管理員
  • 主題13152
  • 回復5
樓主
印刷廠(chǎng)直印加工●彩頁(yè)1000張只需要69元●名片5元每盒-更多產(chǎn)品印刷報價(jià)?聯(lián)系電話(huà):138-1621-1622(微信同號)

??創(chuàng )建一個(gè)表時(shí)表中列的順序在某些程度上對性能會(huì )有一定的影響。(表中的列有數據) 。

Oracle對行數據的存儲結構ROW HEADER(行頭)和COLUMN DATA(列數據)。ROW HEADER存儲的信息是一個(gè)FLAG BYTE,一個(gè)LOCK BYTE 和COLUMN,COUNT。

??COLUMN DATA包含COLUMN LENGTH和COLUMN DATA。

關(guān)于這些我們可以DUMP個(gè)表做一下測試: create test as select * from dba_objects;select header_file,header_block from dba_segments where owner='TEST' and segment_name='TEST';HEADER_FILEHEADER_BLOCK------------------------

---------------------------

13 1179alter system dump datafile 13 block 1180

得出來(lái)的文件在UDUMP中。

??

我們查看如下信息:

block_row_dump:tab 0, row 0, @0x1f20tl: 96 fb: --H-FL-- lb: 0x0 cc: 13--------row header信息。col 0: [ 3] 53 59 53-------------------COLUMN DATAfb: --H-FL-- 是FLAG BYTE。

??fb Flag Byte:K = Cluster Key (Flags may change meaning if this is set to show HASH cluster)C = Cluster table memberH = Head piece of rowD = Deleted rowF = First data pieceL = Last data pieceP = First column continues from previous pieceN = Last column continues in next piecelb: 0x0-----------LOCK BYTE,鎖信息cc: 13------------COLUMN COUNTcol 0---------第一列[ 3]-------------COLUMN LENGTH 53 59 53---------實(shí)際數據

列的值,Oracle首先做的是檢查這些相關(guān)列的長(cháng)度位。

??這個(gè)操作比較快而且效率較高。但是如果反復頻繁的這樣子做還是會(huì )帶來(lái)性能方面的影響。

下面的例子中創(chuàng )建了一個(gè)有10列的表并插入數據。

先設置DB_BLOCK_SIZE=2K(用參數設置,在這里設置為這個(gè)只是為了測試方便):

SQL> create table small ( 2n0 number, 3n1 number, 4n2 number, 5n3 number, 6n4 number, 7n5 number, 8n6 number, 9n7 number, 10n8 number, 11n9 number 12 ) pctfree 0;Table created。

??SQL> begin 2for i in 1。。78 loop 3 insert into small values (0,0,0,0,0,0,0,0,0,0); 4end loop; 5 end; 6 /PL/SQL procedure successfully completed。

??SQL> set timing onSQL> declare 2n number; 3 begin 4for i in 1。。1000000 loop 5 select sum(n0) into n from small; 6end loop; 7 end; 8 /PL/SQL procedure successfully completed。

??Elapsed: 00:07:437。30SQL> declare 2n number; 3 begin 4for i in 1。。1000000 loop 5 select sum(n9) into n from small; 6end loop; 7 end; 8 /PL/SQL procedure successfully completed。

??Elapsed: 00:08:482。13。

0
0
收藏0
回帖

創(chuàng )建一個(gè)表時(shí)表中列的順序對性能有什么影響? 期待您的回復!

取消
載入表情清單……
載入顏色清單……
插入網(wǎng)絡(luò )圖片

取消確定

圖片上傳中
編輯器信息
提示信息