“不建议 MySQL 使用 Text 类型”,对于 Text 内容比较短小也不能用吗?

2020-11-24 17:48:48 +08:00
 miniyao
一般知道 longtext 和大的 blob 放在 MySQL 里会影响性能。

如果只是放一些短小 tinytext 、text 也会影响性能吗?

比如有个字段大约在 300~500 个字符,那要么用 varchar(512),或者直接用 text,这两种方式,性能差别会很大吗?
6494 次点击
所在节点    MySQL
29 条回复
warcraft1236
2020-11-24 17:51:50 +08:00
别的不知道,就知道 text 是没法整体加索引的,也是前多少个字符加到索引里边
xuanbg
2020-11-24 17:54:58 +08:00
既然 varchar 够用,就不要用 text 了。
RedisMasterNode
2020-11-24 18:02:11 +08:00
InnoDB 里面决定 TEXT 和 Blob 类型是否要外联(也就是放到外部空间)依据是一个页中是否能够存放下 2 行数据,如果不可以,Text 和 Blob 就会外联,否则就会存在行内,这时和 varchar 等没有什么差异。按照你的描述如果只有 300-500 个字符,这时候 TEXT 会表现得和 varchar ( 500 )类似。

大部分使用 TEXT 和 BLOB 的时候都是要存储好几 KB 、MB 的内容,可以考虑清楚自己要存什么东西再定

对于索引,我猜可以通过索引字段内容的开头 xxx 字符处理,可以自行尝试一下
sagaxu
2020-11-24 18:13:11 +08:00
那 mysql 干嘛要有 text 类型?
wnanbei
2020-11-24 18:16:02 +08:00
`VARCHAR` 大于某些数值的时候,其会自动转换为 `text`,大概规则如下:

- 大于 varchar(255) 变为 `TINYTEXT`
- 大于 varchar(500) 变为 `TEXT`
- 大于 varchar(20000) 变为 `MEDIUMTEXT`

在某个地方看到的
wnanbei
2020-11-24 18:23:54 +08:00
我个人感觉用 varchar 不用 text 主要原因是 varchar 可以灵活设置长度,语义清晰的同时避免长度超长。varchar 底层就是 text 的话,性能应该是没有区别的。
Hanggi
2020-11-24 18:27:24 +08:00
换 Postgresql 好了
RedisMasterNode
2020-11-24 18:38:22 +08:00
keepeye
2020-11-24 18:42:01 +08:00
我个人习惯超过 255 的长度,都用 text
wd
2020-11-24 18:44:22 +08:00
varchar 可以限制最大字符数,超了是没法存的。但是 text 没有限制,如果出了异常是有可能存超出你想象的数据的。所以对于已知是长度有限的数据,建议用 varchar 。
dorothyREN
2020-11-24 18:59:24 +08:00
换 PG 吧,无脑 text
qwerthhusn
2020-11-24 19:00:38 +08:00
对于 Text 内容比较短小时不建议使用,大的时候就可以正常用了
love
2020-11-24 19:43:50 +08:00
很多人的性能瓶颈都是想象出来的,TEXT 的性能会产生性能瓶颈?你试过了嘛
titititi
2020-11-24 20:52:35 +08:00
正好今天看的一篇关于 Text 类型的文章

https://juejin.cn/post/6898479206087262222
raaaaaar
2020-11-24 20:58:47 +08:00
就我拿那 web 接口的使用,根本不可能有啥瓶颈
guisheng
2020-11-24 21:04:09 +08:00
我不接受它的建议。
loading
2020-11-24 21:07:54 +08:00
不要提前优化,先把 app 写出来再说。
loading
2020-11-24 21:08:29 +08:00
有一本书,我没看,书名就够了。
《要搞定,不要完美》
Flymachine
2020-11-25 09:35:07 +08:00
@wd 你一说这,我想到了日本斗鱼之前对直播弹幕长度没有限制。让 NGA 老哥搞出了 16G 核弹弹幕。能让内存 16G 以下的观看弹幕的电脑全部撑炸。据说还能搞出 32G 的弹幕。不过现在 BUG 修复了。应该就是这块的问题
wnanbei
2020-11-25 09:51:23 +08:00
@RedisMasterNode 看我 5L 的回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728806

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX