數據庫設計中關於數據類型的優化


    在數據庫設計中,尤其在建表的時候,我們需要分別對每個字段確定對應的數據類型。那麼MySQL支持的數據類型非常多,選擇正確的、合理的數據類型對後面的查找速度有直接的影響。不管存儲哪種類型的數據,下面有幾個簡單的設計原則:


1、儘量使用可以正確存儲數據的最小數據類型

    更小的數據類型通常更快,因爲它們佔用更少的磁盤、內存和CPU,並且在處理時需要的CPU週期也更少。不過需要確保在設計之前,沒有低估需要存儲的數據值的範圍,因爲在後期增加數據類型的範圍是一個非常痛苦的過程。。。

    比如,當我們確定數據值的範圍始終都在0~255之間的整數的話,那麼最好使用tinyint unsigned類型,其存儲大小爲1個字節。

    而,tinyint 的範圍是-128~127;

    int的範圍是-2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型數據(所有數字),存儲大小爲4個字節;

    bigint的範圍是 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數據(所有數字)。存儲大小爲 8 個字節;

    smallint unsigned的範圍是 –2^15(2^15表示2的15次冪) 到2^15 – 1,即 –32768 到 32767;

    smallint 的範圍是 0 到 2^16 – 1,即 0 到 65535,存儲的字節是2個字節。


2、儘量使用簡單的數據類型

    簡單的數據類型的操作通常需要更少的CPU週期。例如:能夠使用整型的數據,就不要定義成int,因爲字符集和排序規則使得字符比整型更復雜。能夠使用MySQL內建的類型,例如data,就不要使用字符串來存儲日期和時間;還有,儘量使用整型來存儲類似於IP地址的一串數字。


3、儘量避免NULL

    這是因爲,在有NULL值的字段上設計索引、索引統計和值比較都更復雜。在可爲NULL值的列被索引時,每個索引記錄需要一個額外的字節。如果計劃在某一列上建立索引,那麼就應該儘量避免把這個字段設計成可爲NULL的列。如果定義表結構時沒有指定列爲not null, 默認都是允許爲NULL的。



    綜上所述,在設計一個表的時候,第一步先確定每個列的合理的大類型:數字、字符串、時間等等。然後,選擇具體的類型,這個時候就要用到上面的三條規則。例如datetime和timestamp列都可以存儲相同類型的數據,即時間和日期,且都可以精確到秒。然而,timestamp只是用了datetime一半的存儲空間,並且會根據時區變化,具有特殊的自動更新能力。不過,timestamp允許的時間範圍要小得多,有時候它的特殊能力會成爲障礙。



發佈了258 篇原創文章 · 獲贊 86 · 訪問量 78萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章