高性能MySQL读书笔记---建表及数据类型优化

数据类型优化

1.数据类型优化web

    • 尽可能使用能够正确储存数据的最小数据类型,例如状态字段时只有只须要几个数字就使用tinyint而不是int类型
    • 尽可能使用简单的方式去存储数据,能够用整形表示的时候就不要用字符串类型 例如性别,IP等、
    • 避免NULL值的使用,建表时尽可能使用NOT NULL,数据库读取NULL时须要额外的计算,很难优化。
    • 除非在用精度很是高的状况下才使用DEIMAL类型,计算时须要额外的内存开销。能够考虑使用BIGINT来代替DEIMAL须要保留两位小数时乘以100存入,在应用程序处作处理。
    • CHAR类型时候储存很短的而且长度比较固定的字符串,例如MD5值。
    • 对于将来可变的短字符串,尽可能避免使用枚举。
    • 如有按时间统计数据的需求尽可能使用时间类型来存储时间格式而不是用时间戳来存储(有疑问,正常来讲使用时间戳处理时间不是更方便一点??)
    • 避免一张表中有过多的字段
    • 尽可能使用整形做为列标识符,处理起来更方便一点。
    • 尽可能使用使用相同的类型存储相同或则类似的值,特别是须要在关联查询中使用的列。
    1. 范式和反范式redis

      • 概念:1NF.属性不可拆分,2NF.其余字段都依赖主键存在,3NF.各类信息只在一个地方存储。
      • 范式的优缺点sql

        优势:更新操做比反范式更快。
             不多或者没有冗余数据,修改只须要修改更少的数据
             查询单表数据,获取一些数据更方便一点
        缺点:一般状况下查询数据时都须要至少一次的关联查询,可是查询时又须要尽可能的避免多表关联查询,须要在应用程序中作更多连表处理,可能会致使表索引失效。
      • 反范式的优缺点数据库

        优势:数据都在一张表中索引比较好建,一般状况下查询起来更方便一点,而不是符合范式的须要不少的连表操做。
        缺点:会有不少的冗余数据,修改和删除时不方便。
      • 一般状况下是范式和反范式是混用的,须要本身抉择怎么使用更好一点。
    2. 汇总表和缓存表
      一般状况下须要统计一张表中的总计数据时而且表中数据更新很频繁而且数据不少时,须要汇总表来配合,而不是直接去查询主表数据,例如须要获取过去一个月的订单,过去二十四小时的消息发送量,过去一天的用户注册量。汇总表须要每隔一段时间去统计数据,例如天天晚上同步上一天的订单数据存入汇总表,每隔一个小时同步上一个小时的消息发送数据。 但是这样作又会致使数据延迟,能够在查询时过往数据在汇总表汇总查询,最新的数据在主表中查询。高效,简单,准确,只能知足其中两个。
    3. 计数器表
      计数器表在web应用程序中使用很频繁.例如统计朋友圈的点赞数,某个文件的下载量,空间访问人数等。使用计数器表使查询更高效。固然有redis之类的nosql数据库是仍是建议使用缓存来统计,更方便一点,例如使用的有序集合来统计点赞数量,还能作排行榜功能。
    4. 为了查询更高效,一般须要加额外的索引,冗余列,冗余的汇总表等。加大了维护难度,使写入时更麻烦一点,可是能很大的提高了读的效率。
    相关文章
    相关标签/搜索