MySQL内存临时表和磁盘临时表
BLOB 和 TEXT 类型 BLOB 和 TEXT 都是为存储很大的数据而设计的字符串数据类型,分别采用二进制和字符方式存储。实际上,它们分别属于两组不同的数据类型家族:字符类型是 TINYTEXT , SMALLTEXT ,ТЕХТ, MEDIUMTEXT , LONGTEXT ;对应的二进制类型是 TINYBLOB , SMALLBLOB , BLOB . MEDIUMBLOB , LONGBLOB 。 BLOB 是 SMALLBLOB 的同义词, TEXT 是 SMALLTEXT 的同义词。
与其他类型不同, MysQL 把每个 BLOB 和 TEXT 值当作一个独立的对象处理。存储引擎在存储时通常会做特殊处理。当 BLOB 和 TEXT 值太大时, InnoDB 会使用专门的“外部存储区域来进行存储,此时每个值在行内需要1~4个字节存储一个指针,然后在外部存储区域存储实际的值。
BLOB 和 TEXT 家族之间仅有的不同是 BLOB 类型存储的是二进制数据,没有排序规则或字符集,而 TEXT 类型有字符集和排序规则。
MySQL 对 BLOB 和 TEXT 列进行排序与其他类型是不同的:它只对每个列的最前 max sort length 字节而不是整个字符串做排序。如果只需要排序前面一小部分字符,则可以减小 max sort length 的配置,或者使用 ORDER BY SUSTRING ( column , length )。
MySQL 不能将 BLOB 和 TEXT 列全部长度的字符串进行索引,也不能使用这些索引消除排序。
所以要尽量避免这两种类型
下一篇:
mORMot学习笔记2-2种方式查询数据