跟同事理論:這個mysql 字段用什么好?
問題描述
一個數組序列化,大概長度不到一百,偶爾有200吧,不過很少幾乎沒,然后 同事用了char類型,然后用255個字節, 他說 速度快我覺得 這個表有其他類型 包括文本,時間,int等,作為一個表已經不是靜態表了,動態表char類型速度是沒區別的!所以我覺得用varchar 類型 255比較合適~ 節省點字節,現在數據庫已經99M了 我擦~~
大家覺得如何?
問題解答
回答1:這個用哪個影響都不會太大。
char占用固定長度,在MyISAM引擎中,數據的物理結構上會連續一點,速度在某些場景下是會快一點,產生碎片會少一點。典型的空間換時間。
在InnoDB引擎中,影響不會太大,沒什么好爭論的。
現在MyISAM引擎基本沒人使用了,InnoDB上char類型的使用會浪費更多的內存池空間。
經驗之談。InnoDB引擎如果是固定長度的就用char,比如32位md5的值存儲就用char(32)基他用varchar。
回答2:經驗之談是
相對固定長度的字符一般用char,比如這個列絕大部分都是在200,有198,197的這種非固定長度,并且跨度較大的,會用varchar,比如一部分是200,還有一部分是2的這種
char一般會在效率等方面比varchar好一些
回答3:要知道char是固定長度,有多余的以空格填充,速度自然比varchar快,要說到字節,varchar對英文與漢字都是2個字節,而char對英文一個字節,漢字兩個字節。當然char類型對數據的處理相對來說也要使用trim來消除空格。所以到底要使用什么還是要看你真正要追求的是什么。
回答4:速度快?網上看的?自己試驗過?不想呵呵了,固定短字符用char,其他用varchar
回答5:用測試數據說話。跑個1個G數據寫入查詢更新,試試就知道了
相關文章:
1. docker images顯示的鏡像過多,狗眼被亮瞎了,怎么辦?2. javascript - Web微信聊天輸入框解決方案3. 請教各位大佬,瀏覽器點 提交實例為什么沒有反應4. javascript - log4js的使用問題5. docker - 如何修改運行中容器的配置6. javascript - 移動端textarea不能上下滑動,該怎么解決?7. javascript - history.replaceState()無法改變query參數8. javascript - 為什么form表單提交沒有跨域問題,但ajax提交有跨域問題?9. javascript - Ajax加載Json時,移動端頁面向左上角縮小一截兒,加載完成后才正常顯示,這該如何解決?10. javascript - 為什么這個點擊事件需要點擊兩次才有效果
