学习MySQL,怎么能不会数据类型和schema优化( 二 )
四、日期和时间类型MySQL中所能存储的最小时间粒度为秒 , 常用的日期类型有DATETIME和TIMESTAMP 。
类型存储内容空间大小(Byte)时区概念DATETIME格式为YYYYMMDDHHMMSS的整数8无TIMESTAMP从1970年1月1日零点以来的秒数4有TIMESTAMP显示的值将依赖于时区 , 意味在不同时区查询到的值将不一样 。 除了以上列出的不同 , TIMESTAMP还具有一个特殊属性 , 在插入和更新时 , 如果没有指定第一个TIMESTAMP列的值 , 将会设置这个列的值为当前时间 。
我们在开发过程中 , 应尽量使用TIMESTAMP , 主要是因为其空间大小仅需DATETIME的一半 , 空间效率更高 。
【学习MySQL,怎么能不会数据类型和schema优化】如果我们想存储的日期和时间精确到秒之后 , 怎么办?由于MySQL并未提供 , 所以我们可以使用BIGINT存储微妙级别的时间戳 , 或者使用DOUBLE存储秒之后的小数部分 。
五、选择标识符通常来说整数是标识符的最好选择 , 主要是因为其简单 , 计算快 , 且可使用AUTO_INCREMENT 。
文章插图范式和反范式简单来说 , 范式就是一张数据表的表结构所符合的某种设计标准的级别 。 第一范式 , 属性不可分割 , 现在的RDBMS系统建成的表都是符合第一范式的 。 而第二范式 , 则是消除非主属性对码(可以理解为主键)的部分依赖 。 第三范式消除非主属性对码的传递依赖 。 具体的介绍 , 可以读读知乎上的这个回答()
严格范式化的数据库中 , 每个事实数据会出现且只出现一次 , 不会出现数据冗余 , 这样所能带能带来的好处有:
- 更新操作更快;
- 修改更少的数据;
- 表更小 , 更好地放内存中 , 执行操作更快;
- 更少需要 DISTINCT 或 GROUP BY 。
在实际应用中 , 不会出现完全的范式化或完全的反范式化 , 时常需要混用范式和反范式 , 使用部分范式化的schema , 往往是最好的选择 。 关于数据库设计 , 在网上看到这样一段话 , 大家可以感受下 。
数据库设计应该分为三个境界:
第一境界:刚入门数据库设计 , 范式的重要性还未深刻理解 。 这时候出现的反范式设计 , 一般会出问题 。
第二境界:随着遇到问题解决问题 , 渐渐了解到范式的真正好处 , 从而能快速设计出低冗余、高效率的数据库 。
第三境界:再经过N年的锻炼 , 是一定会发觉范式的局限性的 。 此时再去打破范式 , 设计更合理的反范式部分 。
范式就像武侠里面的招数 , 初学者妄想不按招数来 , 只能死的很难堪 。 毕竟招数都是高手总结归纳的精华 。 而随着武功提高 , 招数熟练之后 , 必然是发现招数的局限性 , 要么忘掉招数 , 要么自创招数 。
只要努力 , 加上多熬几年 , 总能达到第二个境界 , 总会觉得范式是经典 。 此时能不过分依赖范式 , 快速突破范式局限性的人 , 自然是高手 。
文章插图缓存表和汇总表除了上述说到的反范式 , 在表中存储冗余数据 , 我们还可以创建一张完全独立的汇总表或缓存表 , 来满足检索的需要 。
缓存表 , 指的是存储可以从schema其他表中获取数据的表 , 也就是逻辑上冗余的数据 。 而汇总表 , 则指的是存储使用GROUP BY等语句聚合数据 , 计算出的不冗余的数据 。
缓存表 , 可用于优化搜索和检索查询语句 , 这里可以使用的技巧有对缓存表使用不同的存储引擎 , 例如主表使用InnoDB , 而缓存表则可使用MyISAM , 获得更小的索引占用空间 。 甚至可以将缓存表放到专门的搜索系统中 , 例如Lucene 。
汇总表 , 则是为了避免实时计算统计值所带来的高昂代价 , 代价来自两方面 , 一是需要扫描表中的大部分数据 , 二是建立特定的索引 , 会对UPDATE操作有影响 。 例如 , 查询微信过去24小时的朋友圈数量 , 则可固定每1小时扫描全表 , 统计后写一条记录到汇总表 , 当查询时 , 只需查询汇总表上最新的24条记录 , 而不必每次查询时都去扫描全表进行统计 。
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 行业|现在行业内客服托管费用是怎么算的
- 华为|台积电、高通、华为、小米接连宣布!美科技界炸锅:怎么会这样!
- 截长|手机截图怎么截长图
- 精英|业务流程图怎么绘制?销售精英的经验之谈
- 助力|上班族的小妙招:怎么弄pdf签名?编辑器来助力
- 收费|企业家商业访谈节目有哪些?怎么收费?
- 涉嫌|李佳琦店铺被罚是怎么回事?店内洗发水涉嫌虚假宣传
- 究竟|免费的OPPO R1电视究竟怎么样
- 恢复|电脑文件不小心被删除了怎么恢复?文件恢复可以用这招解决!
