- 選擇合適的資料型別
在創建初期資料型別的選擇非常重要,錯誤的資料型別會導致資源的浪費和檢索的速度,如何選擇資料型別重點在合適二字,如何選擇呢先讓我們看看不同的型別介紹
型別介紹
整數
TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT 分別是 8 ,16,24,32,64位儲存空間 范圍從-2n-1 到 2n-1 -1N是空間位數
整數型別有UNSIGNED屬性 表示不許有負值 這可以提高正數上線比如 TINYINT.UNSIGNED可以存盤0-255,而不加UNSIGNED
范圍是-128至127
補充知識 int(1)和int(10)儲存空間是一樣的 數字只是限制合法范圍
實數
實數是帶有小數部分的數字,然而不只是為了儲存小數部分 也可以使用DECIMAL 儲存比 BIGINT更大的數字
FLOAT比DOUBLE 運算更快(因為CPU支持原生浮點計算)
字串型別
varchar用于儲存可變長字串,它比定長型別更節省空間,因為它僅使用必要的空間
char型別是定長的 CHAR適合儲存很短的字串或者所有值都接近一個長度的 例如MD5加密密碼,對于經常變更的資料CHAR也比VARCHAR 更好 因為定長型別不易產生碎片,
BLOB和TEXT型別都是為大資料而設計 分別用二進制和字符方式儲存 當BLOB和TEXT值太大時 InnoDB會使用專門的外部儲存區進行儲存
列舉
ENUM(不常用)有時候可以用列舉代替常用字串型別,列舉列可以把不重復的字串儲存成一個集合 MYSQL 在儲存列舉時很緊湊 會值壓縮到一兩個位元組中
日期型別
DATETIME 這個型別能保存大范圍的值從1001年到9999年,精度為秒
TIMESTAMP這個型別保存范圍197011到2038年 并且提供了UNIX_TIMESTAMP函式轉換時間戳
位資料型別
BIT(不建議使用)
BIT和TINYINT同義詞 MYSQL把BIT型別當成字串而不是數字型別 資料插入bit型別欄位時,先轉換為二進制 當向bit(1)的col1列插入2時,由于2的二進制表示為10,需要兩位,所以插入失敗,將col1改為bit(2)即可插入成功 BIT型別,用于存放位欄位型別 直接使用select是無法看到bit型別的內容的 可以用bin()或hex()函式進行讀取
SET多選字串資料型別
適合存盤“多個值”, 欄位名稱 SET(“選項1”,“選項2”,…,‘選項n’) 它在Mysql內部是以一系列打包的位的集合來表示 這樣有效的利用了儲存空間 它的缺點是 改變列定義代價高 在SET里也沒辦法用索引查詢
標識列的注意事項
整數型別
整數通常是標識列最好的選擇 因為他們很快 并且可以使用AUTO_INCREMENT
ENUM和SET型別
對于標識列來說ENUM和SET型別不是很好的選擇 只適合儲存固定資訊
字串型別
盡量不要選擇字串來當標識列因為他們消耗空間且比數字慢 如果非要用請轉換為16位元組數字 儲存在BINARY(16)列中 UNHEX()轉換 HEX()轉回
總結
用合適的儲存型別 例:如IP 192.168.1.111人們經常使用varchar來儲存,然而他是32位無符號整數 至于加點是為了讓大家容易理解 所以應該用無符號儲存IP MYSQL提供INET_ATON() 和 INET_NTOA函式轉換
在不超出儲存大小范圍內 盡量選擇最小的資料型別 (因為小型別占用磁盤 記憶體 CPU快取更少)
型別越簡單越好 (整型比字串操作代價低)
避免NULL值除非真的需要 (在索引統計和值對比都更復雜 當建立索引時 每個索引都需要額外的位元組)通常改為not null (MyISAM 真的不建議有NULL) 如果引擎為(InnoDB的話相對好一些 因為有單獨的位儲存NULL)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/140293.html
標籤:其他
上一篇:途牛旅游專案環境搭建
下一篇:無腦Mysql安裝教程
