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 删除。