mysql如何实现树状结构排序_存储空间


图片放在下面

  • 简单
  • 尽量避免NULL
  • 更小
  • TINYINT(8)
  • SMALLINT(16)
  • MEDIUMINT(24)
  • INT(32)
  • BIGINT(64)
  • 类型
  • unsigned(不允许负数,并且把正上限提高了一倍)
  • signed
  • 内存
  • 磁盘
  • DECIMAL(8)
  • 用于保存精确的小数
  • MySQL4.1以及早期版本
  • 对decimal值执行浮点运算,会因为丢失精度而导致奇怪的结果,在这些版本中,decimal仅仅是存储类型。
  • MySQL5.0
  • 支持精确的数学运算,服务器自身进行了decimal运算,因为CPU并不支持对她进行直接运算。
  • FLOAT(4)
  • DOUBLE
  • 保存了可变长度的字符串
  • 比固定长度类型占用更少的存储空间(只占用自己需要的空间)
  • 例外是使用ROW_FORMAT=FIXED创建的MyISAM表,它为每行使用固定长度的空间,可能会造成浪费
  • 当最大长度远大于平均长度,并且很少发生更新的时候,建议使用VARCHAER。解决了碎片化问题
  • 固定长度
  • 适合存储长度相似的值,比如用户密码的MD5
  • 适合经常改变的值
  • 对于很短的列,效率高于varchar
  • 以二进制的形式保存大量数据
  • TINYBLOB
  • SMALLBLOB
  • BLOB
  • MEDIUMBLOB
  • LONGBLOB
  • mysql把blob和text当做有实体的对象来处理,存储引擎通常会特别的保存它们,InnoDB在它们较大的时候回使用单独的“外部”存储区域来进行保存,每个值在行里面都需要1到4字节,并且还需要足够的外部存储空间来保存时实际的值。
  • text和blob唯一的区别就是blob保存的是二进制数据,没有字符集和排序规则,但是text有字符集和排序规则。
  • Memory存储引擎不支持blob和text类型,尽可能避免使用blob和text,如果不能避免,可以使用order by substring(column,length)把这些值转换为字符串,让它们使用内存中的临时表。
  • 使用enum代替字符串类型
  • DATETIME
  • 保存大范围的值,从1001到9999年,精度为秒(YYYYMMDDHHMMSS)与时区无关,使用了8字节存储空间
  • 2008-01-16 22:37:08
  • TINESTAMP
  • 保持了自1970年一月一日午夜(格林尼治标准时间)以来的秒数,和UNIX的时间戳相同,只占用了4字节的存储空间,表示1970-2038年。
  • BIT
  • Image
  • 使用bit要小心,尽量避免
  • 如果只想保存一位的true/false,另一个选择是创建一个可空的CHAR(0)列,它能保存空值(NULL)或0长度的值(空字符串)
  • SET
  • 如果要保存许多true/false值,可以考虑把许多列合并为SET数据类型,它在MySQL内部是以一系列位表示的。有效的使用了存储空间,主要缺点是改变列定义的代价比较高(需要ALTER TABLE),通常来说也不能在SET列上使用索引进行查找。
  • Image
  • 通常是标识符的最佳选择,因为速度快,并且能使用AUTO_INCREMNET
  • 注意随机值的字符串
  • Image
  • Image
  • 索引死帮助MySQL高效获取数据的数据结构,当数据很大,性能下降,这时候索引就很重要了
  • 为什么要小心自动生成的框架.rtfd
  • MySQL只能高效的搜索索引最左前缀。
  • 索引实在存储引擎层实现的,而不是服务器层。
  • B-Tree索引


mysql如何实现树状结构排序_存储空间_02