1. 程式人生 > >讓天下沒有難用的資料庫 » Oracle列順序的影響

讓天下沒有難用的資料庫 » Oracle列順序的影響

                                                        Oracle列順序的影響

通常情況下,dba或開發人員在進行表設計的時候,都不會考慮到列在表中的順序的問題,那麼列的順序對我們加快訪問表中的資料有沒有作用喃?如果我們知道了資料庫引擎是怎樣在塊中儲存行的話,這個問題我們就能容易明白了。

H:header記錄了行本身的一些屬性資訊,比如是否鎖定,該行中有多少列等;

Ln:length每列的長度

Dn:data 資料

create table test_column_order

(

id1 number,

id2 number,

id3 number,

id4 number,

id5 number,

id6 number,

id7 number,

id8 number,

id9 number,

id10 number

)

begin

for i in 1..1000000 loop

insert into test_column_order values(1,2,3,4,5,6,7,8,9,0);

end loop;

end;

/

declare

sum1 number;

begin

for i in 1..200 loop

select count(id1) into sum1 from test_column_order;

end loop;

end;

/

declare

sum1 number;

begin

for i in 1..200 loop

select count(id10) into sum1 from test_column_order;

end loop;

end;

/

在瞭解了行的格式後,資料庫引擎要定位到某一列,但是它並不知道該列在這一行中的偏移值,這樣不得不從第一列開始,然後按照第一列的長度定位到第二列,然後在根據第二列的長度定位到第三列。那麼我們在定位第一列的速度應該是最快的,定位往後的列將會越來越慢。

那麼在瞭解資料庫的訪問規則後,dba應該將經常訪問的列放在表的前面。這個需要協同開發人員,在系統設計的時候,做出合適的評估。比如在表設計中經常使用的primary key,在sql稽核的時候,發現全部是放在了第一列,但是我們很少使用它,反而一些經常使用時間欄位,狀態標誌位放在了表的後面,如果我們能夠利用好列順序的影響,那麼對我們的效能提高也是有一定意義的。