码农的世界架构师成长记

关于数据库的几点总结

2018-12-29  本文已影响204人  zh_harry
mysql.jpeg

范式与冗余

满足数据库的范式的目的就是为了减少或消除冗余,所以两者是一对矛盾,即满足范式可能就会出现冗余,而冗余就满足不了范式。所以在数据库的设计中要做一个平衡。
个人经验在以下场景可以考虑冗余

  1. 为了查询性能,减少io次数,比如冗余user_name,不需要为了显示用户名而再进行一次io,而这种场景带来的一个问题就是数据不一致,需要根据具体业务而定。
  2. 业务需要的数据冗余,比如订单的快照信息,因为用户下单那一刻的数据要快照下来以备查,防止以后产品信息的修改,影响订单的数据。

数据库范式的优点就是减少存储,如果有网络传输也会减少网络带宽,提高传输速度。比如说某种数据的原始数据的订阅,尽量满足数据范式,而需要在订阅端对数据进行进一步的解析处理,即适当加一些冗余,以满足查询性能。

总结起来就是空间和时间的平衡。

字段类型

where 子句

field 字段

查询尽避免*,即减少磁盘io也减少网络开销。

order by

b+tree vs b tree

balance-tree 读(b tree)因为中文教科书印刷原因,很多教授读b减树,这里纠正一下。


b-tree.jpg

b+tree


b+tree.jpg

从上图可知b+tree 是比较适合mysql 索引结构的,两点原因

  1. 索引块不存在数据,只包含索引和指针,这样可以最大化的读取索引,从而减少索引的io操作。
  2. 数据节点间存在指针,以保证顺序。
    所以索引的条件尽量保证范围是确定的比如= >= <= like 'prefix%' 会走索引,而!= like '%' in not exist 等将不会走索引,而null值不会包含在索引中,上文已经提到。

以上为经验之谈,可能不够严谨,未免有漏洞,有问题请专业dba指正。

上一篇 下一篇

猜你喜欢

热点阅读