请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

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

正在回答

1回答

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 ericdemon #1
    超过762个字节会再做一次查找的话,那还是建议把varchar长度控制在255以下呀。。
    老师,那如果业务需求是有1000字文本的字数的话,是不是就没有办法了呀。。
    回复 有任何疑惑可以回复我~ 2019-07-25 23:00:08
  • sqlercn 回复 提问者 ericdemon #2
    如果实在要用也是可以用的,只是要控制这种列的数量
    回复 有任何疑惑可以回复我~ 2019-07-26 07:16:15
  • 提问者 ericdemon 回复 sqlercn #3
    谢谢老师
    回复 有任何疑惑可以回复我~ 2019-07-26 07:47:30
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信