zoukankan      html  css  js  c++  java
  • 高性能MySql阅读笔记第四章--Schema与数据类型优化阅读笔记2

    高性能MySql阅读笔记第四章--Schema与数据类型优化阅读笔记2

    Mysql schema设计

    一.Mysql schema设计中的陷阱

    1.当心自动生成的schema。写的很烂的schema迁移程序,或者自动生成的schema的程序,都会导致严重的性能问题。

    2.太多的列。Mysql的存储引擎API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。从行缓冲中将编码过的列转换成行数据结构的操作代价是非常高的。

    3.太多的关联。

    4.全能的枚举。

    5.变相的枚举。

    6.非此发明的NULL。之前写了避免使用NULL的好处,并且建议尽量的考虑代替方案。但是遵循这个原则不要走极端,例如从特定类型的值域中选择一个不可能的值(-1)代替NULL,可能导致代码复杂很多,并且容易引入bug,处理NULL确实不容易,但有时候会比他的替代方案更好。

    二.范式和反范式

    对于任何给定的数据通常都有很多种表示方法,从完全的范式化到完全的反范式化,以及两者的折中。在范式化的数据库中,每个事实数据出现并且只出现一次。相反,在反范式的数据库中,信息是冗余的,可能会存储在多个地方。

    1.范式的优点和缺点。

    优点:

      范式的更新操作通常比反范式要快。

      当数据较好的范式化是,就只有很少或者没有重复的数据,所以只需要修改更少的数据。

      范式化的表通常更小,可以更好的存放在内存里,所以执行操作会更快。

      很少有多余的冗余数据意味着检索列表数据时更少需要DISTINCT或者GROUP BY语句。

    缺点:

      范式schema的缺点是通常需要关联,稍微复杂一些的查询语句在符合范式的schema上都可能需要至少一次关联。

    2.反范式的优点和缺点。

    优点:

      反范式的schema因为所有数据都在一张表中,可以很好的避免关联。

    3.混用范式化和反范式化。

    事实上,完全范式化和完全反范式化都是实验室里才有的东西。最常用的反范式化数据的方法是复制或者缓存,在不同的表中存储相同的特定列,可以使用触发器更新缓存值,这使得实现这样的方案变得更简单。

    四.缓存表和汇总表

    有时候提升性能最好的方法是在同一张表中保存衍生的冗余数据,有时候也需要创建一张完全独立的汇总表或缓存表,这是非常好的方法。

    五.物化视图。

    物化视图实际上是预先计算并且存储在磁盘上的表,可以通过各种各样的策略刷新和更新。

    六.计数器表。预制行。

    七.加快ALTER TABLE操作的速度。通过MODIFY COLUMN,ALTER COLUMN操作来改变列的默认值。

    八.只修改.frm文件。

    下面这些操作可能不需要重建表。

    1.移除一个列的 AUTO_INCREMENT属性。

    2.增加,移除或更改ENUM和SET常量,如果移除的是已经有行数据用到的常量,查询将会返回一个空字符串。

    总结:

    良好的schema设计原则是普遍适用的,但Mysql有他自己的实现细节要注意,概括起来说,尽可能保持任何东西小而简单总是最好的。

     

  • 相关阅读:
    1.造一个句子先造出 主谓宾 或主系表,或therebe 这个句子就确定了
    电脑族应每天赤脚走15分钟
    10我操介词
    2.在英语句子中,什么时候用助动词do\does ,什么时候用be动词am\is\are?
    6.英语单词末尾的——s,什么时候发S,什么时候发Z
    转 Dll创建一个"日历"窗体(一)
    2012 MultiUniversity Training Contest 2
    最大流 基础
    HDOJ 4006 The kth great number(优先队列)
    树状数组
  • 原文地址:https://www.cnblogs.com/zechac/p/5240375.html
Copyright © 2011-2022 走看看