? ? ? ?因為列的字段越大,建立索引時所需要的空間也會越大,這樣一頁中所能存儲的索引節點的數量也會越少,在遍歷時所需要的IO次數也越多, 索引的性能也會越差。
處理方法
? ? ? ?1、將字符串轉換成數字類型存儲,如:將IP地址轉換成整形數據。
? ? ? ?mysql提供了兩個方法來處理ip地址:
? ? ? ?inet_aton 把ip轉為無符號整型(4-8位)
? ? ? ?inet_ntoa 把整型的ip轉為地址
? ? ? ?插入數據前,先用inet_aton把ip地址轉為整型,可以節省空間。顯示數據時,使用inet_ntoa把整型的ip地址轉為地址顯示即可。
? ? ? ?2、對于非負型的數據(如自增ID、整型IP)來說,要優先使用無符號整型來存儲
? ? ? ?因為:無符號相對于有符號可以多出一倍的存儲空間
? ? ? ?SIGNED INT -2147483648~2147483647
? ? ? ?UNSIGNED INT 0~4294967295
? ? ? ?VARCHAR(N)中的N代表的是字符數,而不是字節數
? ? ? ?使用UTF8存儲255個漢字 Varchar(255)=765個字節。過大的長度會消耗更多的內存
? ? ? ?二、避免使用TEXT、BLOB數據類型,蕞常見的TEXT類型可以存儲64k的數據
? ? ? ?建議把BLOB或是TEXT列分離到單獨的擴展表中
? ? ? ?Mysql內存臨時表不支持TEXT、BLOB這樣的大數據類型,如果查詢中包含這樣的數據,在排序等操作時,不能使用內存臨時表,必須使用磁盤臨時表進行。
? ? ? ?而且對于這種數據,Mysql還是要進行二次查詢,會使sql性能變得很差,但是不是說一定不能使用這樣的數據類型。
? ? ? ?如果一定要使用,建議把BLOB或是TEXT列分離到單獨的擴展表中,查詢時一定不要使用select * 而只需要取出必要的列,不需要TEXT列的數據時不要對該列進行查詢。
? ? ? ?TEXT或BLOB類型只能使用前綴索引
? ? ? ?因為MySQL對索引字段長度是有限制的,所以TEXT類型只能使用前綴索引,并且TEXT列上是不能有默認值的。
? ? ? ?三、避免使用ENUM類型
? ? ? ?1、修改ENUM值需要使用ALTER語句
? ? ? ?2、ENUM類型的ORDER BY操作效率低,需要額外操作
? ? ? ?3、禁止使用數值作為ENUM的枚舉值
? ? ? ?四、盡可能把所有列定義為NOT NULL
? ? ? ?1、因為索引NULL列需要額外的空間來保存,所以要占用更多的空間;
? ? ? ?2、進行比較和計算時要對NULL值做特別的處理
? ? ? ?五、使用TIMESTAMP(4個字節)或DATETIME類型(8個字節)存儲時間
? ? ? ?TIMESTAMP 存儲的時間范圍 1970-01-01 00:00:01 ~ 2038-01-19-03:14:07。
? ? ? ?TIMESTAMP 占用4字節和INT相同,但比INT可讀性高
? ? ? ?超出TIMESTAMP取值范圍的使用DATETIME類型存儲。
? ? ? ?經常會有人用字符串存儲日期型的數據(不正確的做法):
? ? ? ?缺點1:無法用日期函數進行計算和比較
? ? ? ?缺點2:用字符串存儲日期要占用更多的空間
? ? ? ?六、同財務相關的金額類數據必須使用decimal類型
? ? ? ?1、非睛準浮點:float,double
? ? ? ?2、睛準浮點:decimal
? ? ? ?Decimal類型為睛準浮點數,在計算時不會丟失精度。占用空間由定義的寬度決定,每4個字節可以存儲9位數字,并且小數點要占用一個字節。可用于存儲比bigint更大的整型數據。
? ? ? ?以上是南昌網站建設開發公司百恒科技小編要跟大家聊到的一些關于MySQL數據庫字段設計規范的內容,希望能夠對大家有所幫助,想要了解更多關于這方面的內容,歡迎留言咨詢百恒科技,百恒科技是一家有著16年經驗的網絡開發公司,專注于南昌網站建設開發、南昌小程序開發等互聯網服務!
相關文章推薦? ?:? ? MySQL中trim函數的用法? ? ?
? ? ? ? ? ? ? ? ? ? ? ?MySQL數據庫基本設計規范是什么?? ??