老师,对varchar类型和text类型有几个疑问的地方

来源:3-31 物理设计-为列选择适合的数据类型-建议2

ericdemon

2019-07-25

  1. ’ Text类型不会使用到内存临时表,只能用磁盘临时表 ’ , 如果我设置了 varchar(1100) , 那么varchar在这么长的字符上任然会使用内存临时表吗?还是说如果字符太长的话,只能用磁盘临时表?
  2. ‘Text类型在sql读取的时候会进行二次查找,性能会变得很差’ , 如果该列不存在索引树上的话,那么不是都需要回表做二次查找的吗?那么哪怕是varchar类型也需要做二次查找吧?

老师,因为在我身边的业务中,的确是遇到了这个问题,二次开发遗留下来的表结构中出现了部分Text字段类型且存在大表中,当时我做出的解决方案是讲类型改为varchar类型,但是因为文字太多,我不得不使用varchar(1100)这种设定很长的字符,然后今天看了您的视频,就有点困惑起来了

写回答

1回答

sqlercn

2019-07-25

  1. 内存临时表没有可变长字符的类型,所以字符长度都是固定的,所以如果是varchar(1100)要使用内存临时表的话就会占用1100*字符集长度的字符,显然会十分的浪费内存,所以MySQL还是会使用磁盘临时表处理。

  2. 是的,不过TEXT类型会多一次查找操作,其实是超过762个字节的字符串都会进行这种操作。

0
3
ericdemon
回复
sqlercn
谢谢老师
2019-07-26
共3条回复

零基础入门 详解企业主流数据库MySQL8.0

掌握SQL优化与慢查询优化,具备独当一面的能力

1641 学习 · 485 问题

查看课程