MySQL性能优化之char、varchar、text的区别(转载)
?
?????參考:https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html?
?????在存儲(chǔ)字符串時(shí), 可以使用char、varchar或者text類型, 那么具體使用場(chǎng)景呢?
????????參考下面這個(gè)表結(jié)構(gòu):
1、 char長度固定, 即每條數(shù)據(jù)占用等長字節(jié)空間;適合用在身份證號(hào)碼、手機(jī)號(hào)碼等定。
2、 varchar可變長度,可以設(shè)置最大長度;適合用在長度可變的屬性。
3、 text不設(shè)置長度, 當(dāng)不知道屬性的最大長度時(shí),適合用text。
按照查詢速度: char最快, varchar次之,text最慢。
char:char(n)中的n表示字符數(shù),最大長度是255個(gè)字符; 如果是utf8編碼方式, 那么char類型占255 * 3個(gè)字節(jié)。(utf8下一個(gè)字符占用1至3個(gè)字節(jié))
varchar:varchar(n)中的n表示字符數(shù),最大空間是65535個(gè)字節(jié), 存放字符數(shù)量跟字符集有關(guān)系;
?????MySQL5.0.3以前版本varchar(n)中的n表示字節(jié)數(shù);
?????MySQL5.0.3以后版本varchar(n)中的n表示字符數(shù);
??PS:varchar實(shí)際范圍是65532或65533, 因?yàn)閮?nèi)容頭部會(huì)占用1或2個(gè)字節(jié)保存該字符串的長度;如果字段default null(即默認(rèn)值為空),整條記錄還需要1個(gè)字節(jié)保存默認(rèn)值null。
???????如果是utf8編碼, 那么varchar最多存65532/3 = 21844個(gè)字符。
text:
跟varchar基本相同, 理論上最多保存65535個(gè)字符, 實(shí)際上text占用內(nèi)存空間最大也是65535個(gè)字節(jié); 考慮到字符編碼方式, 一個(gè)字符占用多個(gè)字節(jié), text并不能存放那么多字符; 跟varchar的區(qū)別是text需要2個(gè)字節(jié)空間記錄字段的總字節(jié)數(shù)。
PS: 由于varchar查詢速度更快, 能用varchar的時(shí)候就不用text。
順便提一句: 當(dāng)表有成百上千萬條數(shù)據(jù)時(shí), 就要使用MySQL的分區(qū)(partition)功能, 原理有點(diǎn)像分治算法,就是將數(shù)據(jù)切割成多個(gè)部分。
?
總結(jié)
以上是生活随笔為你收集整理的MySQL性能优化之char、varchar、text的区别(转载)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: @property的必要性
- 下一篇: linux cmake编译源码,linu