区别:
BLOB存储的是二进制数据,没有排序规则或字符集。
TEXT存储的是字符,有排序规则和字符集。
因为Memory引擎不支持BLOB和TEXT类型,最好的解决方案避免使用BLOB和TEXT类型。如果实在无法避免,一般是在所用到的BLOB字段的地方都使用substring(列名,长度),将
列值转换为字符串(在ORDER BY子句中也可以适用),这样就可以使用内存临时表了。但要确保截取的字符串足够短,不会使临时表的大小超过max_heap_table_size或tmp_table_size,超过以后MySQL会将内存临时表转换为MyISAM磁盘临时表。
如:
有一个表有1000W行的数据,占用5G的磁盘空间。其中有一个utf8字符集的VARCHAR(1000)列。每个字符最多使用3个字节,最坏情况下需要3000字节的空间。
如果在ORDER BY中用到这个列,并且查询扫描整个表,为了排序就需要超过30GB的临时表。
如果Explain执行计划的Extra列包含“Using temporary”,则说明查询使用了隐式临时表。