----------------------------------------------------------------------------
---- 本文為andkylee個人原創,請在尊重作者勞動成果的前提下進行轉載;
---- 轉載務必註明原始出處
:
http://blog.csdn.net/andkylee
---- 關鍵字: ASA 內部資料結構 分析 datatypes internals physical storage
----------------------------------------------------------------------------
從昨天開始分析sybase anywhere 資料庫的內部資料結構。
已知道每行的資料是如何儲存的,可變與固定長度列的儲存方式。尤其分析出來了datatime類型資料是如何儲存的。
asa資料庫的資料結構比起來ase簡單多了。每行行頭有2位元組資料表示該行資料的總位元組數。可變長度列的資料前有表示該可變欄位長度的資料。每行資料內沒有列位移表。
還沒有分析出來的地方有:行位移表,頁頭的資訊!繼續努力!
在這裡說一下asa和ase中的datetime類型,asa中的datetime儲存的日期範圍要比ase中的廣得多。
下面是在ase下用isql連上時查到的最小日期範圍:1753-01-01 00:00:00
1> select datediff(dd,'1753-01-01 00:00:00','2010-01-19 13:00:00')
2> go
-----------
93885
(1 row affected)
1> select datediff(dd,'1752-12-31 00:00:00','2010-01-19 13:00:00')
2> go
Msg 247, Level 16, State 1:
Server 'TEST', Line 1:
Arithmetic overflow during implicit conversion of VARCHAR value '1752-12-31
00:00:00' to a DATETIME field .
====================================================================
而在asa中0001-01-01 00:00:00都能存到庫裡面去。
這兩者的範圍的差異使得兩者在資料庫裡面儲存時資料結構不同。
為了ase中datetime類型只精確到1/300秒,而asa中卻能精確到1毫秒呢?
我感覺是不是sybase從效能角度考慮,太精確會導致計算速度變慢,影響整個資料庫的效能下降呢?
後面繼續分析!