资讯专栏INFORMATION COLUMN

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

Aldous / 2510人阅读

摘要:高效,简单,准确,只能满足其中两个。计数器表计数器表在应用程序中使用很频繁例如统计朋友圈的点赞数某个文件的下载量空间访问人数等。

数据类型优化

1.数据类型优化

尽量使用可以正确储存数据的最小数据类型,例如状态字段时只有只需要几个数字就使用tinyint而不是int类型

尽量使用简单的方式去存储数据,可以用整形表示的时候就不要用字符串类型 例如性别,IP等、

避免NULL值的使用,建表时尽量使用NOT NULL,数据库读取NULL时需要额外的计算,很难优化。

除非在用精度非常高的情况下才使用DEIMAL类型,计算时需要额外的内存开销。可以考虑使用BIGINT来代替DEIMAL需要保留两位小数时乘以100存入,在应用程序处做处理。

CHAR类型时候储存很短的并且长度比较固定的字符串,例如MD5值。

对于未来可变的短字符串,尽量避免使用枚举。

若有按时间统计数据的需求尽量使用时间类型来存储时间格式而不是用时间戳来存储(有疑问,正常来说使用时间戳处理时间不是更方便一点??)

避免一张表中有过多的字段

尽量使用整形作为列标识符,处理起来更方便一点。

尽量使用使用相同的类型存储相同或则相似的值,特别是需要在关联查询中使用的列。

范式和反范式

概念:1NF.属性不可拆分,2NF.其他字段都依赖主键存在,3NF.各种信息只在一个地方存储。

范式的优缺点

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

反范式的优缺点

优点:数据都在一张表中索引比较好建,通常情况下查询起来更方便一点,而不是符合范式的需要很多的连表操作。
缺点:会有很多的冗余数据,修改和删除时不方便。

通常情况下是范式和反范式是混用的,需要自己抉择怎么使用更好一点。

汇总表和缓存表
通常情况下需要统计一张表中的总计数据时并且表中数据更新很频繁并且数据很多时,需要汇总表来配合,而不是直接去查询主表数据,例如需要获取过去一个月的订单,过去二十四小时的消息发送量,过去一天的用户注册量。汇总表需要每隔一段时间去统计数据,例如每天晚上同步上一天的订单数据存入汇总表,每隔一个小时同步上一个小时的消息发送数据。 可是这样做又会导致数据延迟,可以在查询时过往数据在汇总表汇总查询,最新的数据在主表中查询。高效,简单,准确,只能满足其中两个。

计数器表
计数器表在web应用程序中使用很频繁.例如统计朋友圈的点赞数,某个文件的下载量,空间访问人数等。使用计数器表使查询更高效。当然有redis之类的nosql数据库是还是建议使用缓存来统计,更方便一点,例如使用的有序集合来统计点赞数量,还能做排行榜功能。

为了查询更高效,通常需要加额外的索引,冗余列,冗余的汇总表等。加大了维护难度,使写入时更麻烦一点,但是能很大的提升了读的效率。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47199.html

相关文章

  • 在线ER模型设计:可视化MySQL数据表及操作

    摘要:让您在线创建流程图系统部署图软件架构图模型组织图软件流程图图表。使用创建数据库模型目前支持及基本的语句建表。后期会进行功能拓展以支持等等数据库模型建模,支持导入生成模型通过语句生成模型模型导出根据模型生成。 概述 ER模型使用可视化了实体存储的信息,以及直观的呈现了实体与实体的关系,在我们实际的应用系统开发过程中新建ER模型可以更好的理解业务模型,为以后的开发维护工作起到归纳总结的作用...

    james 评论0 收藏0
  • 性能MySQL读书笔记 (三)

    摘要:与数据类型优化数据类型选择更小选择不超过需求范围的最小类型更简单避免使用含有列会使索引索引统计和值更为复杂分配空间根据实际需要分配使用内存临时表或操作时会比较糟糕特殊类型书中举例地址应该用无符号整数存储提供方法转换设计陷阱太多列存储引擎需要 1. schema与数据类型优化 1.1 数据类型选择 更小: 选择不超过需求范围的最小类型更简单避免使用Null: 含有Null列会使索引,索引...

    WrBug 评论0 收藏0
  • 性能MySQL读书笔记 (四)

    摘要:查询性能优化优化数据访问检查是否检索大量超过需要的数据是否访问太多行或太多列增加网络开销消耗和内存资源检查服务器层是否在分析大量超过需要的数据行重构查询的方式切分查询有时对于一个大查询我们需要分而治之切分成小查询每次只完成一部分分解关联查询 1. 查询性能优化 1.1 优化数据访问 检查是否检索大量超过需要的数据.是否访问太多行或太多列,增加网络开销,消耗cpu和内存资源 检查服务器...

    snowell 评论0 收藏0
  • 性能MySQL读书笔记---查询优化

    摘要:查询优化查询缓慢的原因是否向数据库请求了不必要的数据查询时是否返回了全部或者大部分数据然后再进行处理的。进行单查或者多表联查时是否返回了全部列数据。将一次处理大量数据的操作,分解为多个小操作。尽量减少在数据库中进行排序操作 查询优化 查询缓慢的原因 是否向数据库请求了不必要的数据1.查询时是否返回了全部或者大部分数据然后再进行处理的。2.进行单查或者多表联查时是否返回了全部列数据。...

    keithyau 评论0 收藏0
  • MySQL 必知必会读书笔记 (3)

    摘要:在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。用户可能没有创建存储过程的安全访问权限。表示进行检查查找。 存储过程 大型系统必须得要存储过程和触发器吗,from 知乎 一般情况下,Web 应用的瓶颈常在 DB 上,所以会尽可能的减少 DB 做的事情,把耗时的服务做成 Scale Out,这种情况下,肯定不会使用存储过程; ...

    iflove 评论0 收藏0

发表评论

0条评论

Aldous

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<