首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【高性能MySQL】Schema与数据类型优化-字符串类型(二)

【高性能MySQL】Schema与数据类型优化-字符串类型(二)

原创
作者头像
用户9295575
发布2025-02-01 08:57:14
发布2025-02-01 08:57:14
1830
举报

BLOB和TEXT类型

BLOB和TEXT都是为存储很大的数据而设计的字符串数据类型,分别采用二进制和字符串方式存储。他们分别属于两组不同的数据类型家族:字符类型是TINYTEXT,SMALLTEXT,TEXT,MEDIUMTEXT,LONGTEXT。二进制类型是TINYBLOB,SMALLBLOB,BLOB,MEDIUMBLOB,LONGBLOB。BLOB是SMALLBLOB的同义词,TEXT是SMALLTEXT的同义词。

当BLOB和TEXT值太大时,InnoDB会使用专门的“外部”存储区域来进行存储,此时每个值在行内需要1~4个字节存储一个指针,然后在外部存储区域存储实际的值。BLOB类型存储的是二进制数据,没有排序规则或字符集,而TEXT类型有字符集和排序规则。

因为Memory引擎不支持BLOB和TEXT类型,所以如果查询使用了BLOB和TEXT列并且需要使用隐式临时表,将会使用磁盘临时表,及时只有几行数据也是如此。这会导致严重的性能开销。最好的解决办法就是尽量避免使用BLOB和TEXT类型。如果实在无法避免,就在所有用到BLOB字段的地方都使用SUBSTRING(column,length)将列值转换为字符串。这样就可以使用内存临时表了。但是要确保截取的字符串足够短,不会使临时表的大小超过max_heap_table_size或者tmp_table_size,超过以后MySQL会将内存临时表转换成磁盘临时表。

如果EXPLAIN执行计划的Extra列包含“Using tempprary”,表明这个查询使用了隐式临时表。

春节不间断,持续充电!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档