mysql对串列进行短索引_MySQL 请选择合适的列
字符串類型
1、varchar
(1)保存可變長字符串。
理解:比固定長度占用更少的存儲空間,因為它只占用自己需要的空間。例外情況:使用ROW_FORMAT=FIXED創建的MyISAM表,它為每行使用固定長度的空間,可能會造成浪費。
(2)存儲長度信息。如果定義的列小于或等于255,則使用1個字節存儲長度值,假設使用latin1字符集,如varchar(10)將占用11個字節的存儲空間。反過來,varchar(1000),則占用1002個字節的存儲空間。
(3)節約空間,對性能有幫助。
(4)5.0版本以上,無論是取值還是保存,MySQL都會保留字符串末尾的空格。
只分配真正需要的空間
使用varchar(5)和varchar(200)保存‘hello‘占用空間是一樣的。——這里應該指的是磁盤上的空間。
那么使用較短列有何優勢?——巨大的優勢
較大的列會使用更多的內存,因為MySQL通常會分配固定大小的內存塊(如varchar(200)會用200個字符大小的內存空間)來保存值(然后對值進行trim操作,最后放入磁盤)或取值。——這對排序或使用基于內存的臨時表尤其不好。
2、char
(1)固定長度。
(2)保存值時,去掉末尾的空格。
? 咱們再看看varchar
(3)char常用于很短字符串或長度近似相同的字符串的時候很有用。如存儲用戶密碼的MD5哈希值,它的長度總是一樣的。
char優于varchar的地方?
1>> 對于經常改變的值,char優于varchar,因為固定長度行不容易產生碎片。——當最長長度遠大于平均長度,并且很少發生更新的時候,通常適合使用varchar。
2>>對于很短的列,char的效率也是高于varchar的。如對于單字節字符集(如latin1),char(1)只會占用1個字節,而varchar(2)會占用2個字節(有一個字節用來存儲長度的信息)。
3、text
用于保存大量數據。
(1)InnoDB在它們較大的時候會使用“外部”存儲區域來進行保存。——所以需要足夠的外部存儲空間來保存實際的值。
(2)排序方式不同于其他字符類型,不會按照完整長度進行排序,而只是按照max_sort_length規定的前若干個字節進行排序。
4、使用ENUM代替字符串類型
(1)ENUM列可以存儲65 535個不同的字符串。
(2)以緊湊方式保存。根據列表中值的數量,把它們壓縮到1到2個字節中。
(3)MySQL在內部把每個值都保存為整數,以表示值在列表中的位置。
(4)保留了一份“查找表”,來表示整數和字符串在表的.frm文件中的映射關系。
(5)ENUM字符列是固定的,添加、刪除字符串須使用ALTER TABLE。
(6)使用案例:權限表中使用ENUM來保存Y值和N值。
使用方法:
在對enum列使用order by的時候,是按數字排序的,而不是字符串排序。
日期和時間類型
DATETIME:保存大范圍的值。封裝格式:YYYYMMDDHHMMSS。——與時區無關,使用8字節存儲空間。
TIMESTAMP:保存自1970年1月1日午夜(格林尼治標準時間)以來的秒數。——使用4字節存儲空間。
通常使用TIMESTAMP,它比DATETIME更節約空間。有時人們把Unix的時間戳保存為整數值,但是這通常沒有任何好處。——這種格式處理起來不太方便,我們并不推薦它。
總結
以上是生活随笔為你收集整理的mysql对串列进行短索引_MySQL 请选择合适的列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 乐观锁 version_乐观
- 下一篇: java第一阶段知识_坚持:学习Java