Mysql 數據類型優化(三)

1、日期與時間類型

    MySQL 可使用許多類型來保存日期和時間值。
函數

    如:YEAR和DATE。MySQL能存儲的最小時間粒度爲秒(MariaDB支持微秒級別的時間類型)。可是MySQL也可使用微妙級的粒度進行臨時運算,咱們會展現怎麼繞開這種存儲限制。
spa

    DATETIME
排序

        這個類型能保存大範圍的值,從1001年到9999年,精度爲秒。它把日期和時間封裝到格式爲YYYYMMMDDHHHMMSS的整數中,與時區無關。使用8個字節的存儲空間。
字符串

默認狀況下,MySQL以一種可排序的無歧義的格式顯示 DATETIME值,例如「2015-10-24 09:57:33」.這是ANSI標準定義的日期和時間表示方法。效率

    TIMESTAMP
打包

    就像它的名字同樣,TIMESTAMP類型保存了1970年1月1日0點(格林尼治標準時間)以來的秒數,它和UNIX時間戳相同。TIMESTAMP只使用4個字節的存儲空間,所以它的範圍比DATETIME小的多:只能存儲 1970 到 2038年。
數據類型

若是在多個時區存儲或訪問數據,TIMESTAMP和DATETIME的行爲將很不同。二進制

TIMESTAMP提供的值與時區有關係,後者剛保留文本表示的日期和時間。方法

也能夠指定TIMESTAMP的  添加 與更新的行爲,TIMESTAMP列的默認爲NOT NULL技術

除了特殊的行爲以外 ,一般也應該儘可能用TIMESTAMP,由於它比DATETIME空間效率更高有時候人們會將Unix時間戳存儲爲整數值,但這不會帶來任何收益。用整數保存時間戳的格式一般不方便處理,因此不推薦這樣作。


若是須要存儲比秒更小的粒度日期和時間怎麼辦?

MySQL目前沒有提供合適的數據類型,可是能夠經過使用本身的格式存儲: 可使用BIGINT類型存儲微級別的時間戳,或者使用DOUBLE存儲秒以後的小數部分。這兩種方式,均可以,或者可使用MariaDB替代MySQL

2、位數據類型

    MySQL有少數幾種存儲類型使用緊湊的位存儲數據。全部這些位類型,無論底屋存儲格式和處理方式若是 ,從技術上來講都是字符串類型。

    BIT

    在MySQL 5.0 以前,BIT是TINYINT的同義詞。可是在MySQL5.0以及更新的版本,這是一個特性徹底不一樣的數據 類型。

    BIT列,能夠存儲一個或多個ture/false 值。BIT(1)定義一個包含單個位字段,BIT(2)存儲2個位,BIT例最大長度是64個位。

MySQL把BIT看成字符串類型,而不是數字類型,當檢索BIT(1)的值是一個包含二進制0或1的字符串,而不是ASCII碼的「0」或「1」。然而在數字 上下文場景中檢索時,結果將是位字符串轉換成的數字 。須要和另外的值比較結果 ,必定要記得這一點。

對於大部分應用,最好避免使用這種類型。

SET

    若是須要在保存不少的true/false 值,能夠考慮,合併這些列到一個SET數據類型,它在MySQL內部是以一系列打包的位的集合來表示的。這樣就有效的我利用了存儲空間,而且MySQL有像FIND_IN_SET()和FILED()這樣的函數,方便地在查詢 中使用。

缺點:改變列的定義代價較高:須要ALTER TABLE ,這對大表來講是很是昂貴的操做。

相關文章
相關標籤/搜索