mysql-阅读笔记1
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql-阅读笔记1相关的知识,希望对你有一定的参考价值。
mysql schema设计中有些陷阱,这里仅仅是讲Mysql的实现中出现的问题。
1 太多的列
Mysql存储引擎与服务器层通信是通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。解码的速度依赖于列是否为定长字段以及行中列的数量。为了解决一行中出现太多的列,因此需要将实体多个属性拆分成几个表。所谓的“实体-属性-值”设计模式,即EAV设计模式。EAV设计模式用来解决字段出现太多的列问题,一个实体中通常只出现几个属性值,其余值为NULL。EAV设计模式是一个糟糕设计莫斯。。。。弄啥。。。。
2 枚举
一个字段是枚举ENUM类型时,只可以选择一个值。当集合SET类型时候可以选择一个或者多个值。
方式与反方式
完全的范式中每个数据仅存储一次。完全的反范式每个数据可能出现多次。通常情况下是范式与反范式的相互集合。
缓存表表示存储那些可以简单地从schema其他表获取数据的表,但是每次获取速度比较慢,因此存储在缓存表中。
汇总表则是保存Group By语句聚合数据的表。
影子表则是创建一张完全相同表,对其进行更改,然后将数据复制到表中。然后将原来的表rename为新表,影子表rename为现在的表。
物化视图: 通过预先计算并保存表链接或者聚集等耗时较多的结果,执行查询时就可以避免这些操作,注意对应用透明。物化视图实际上是通过预先计算并存储在磁盘上的表,可以通过各种各样的策略刷新和更新。它由下面这些部分组成。变更数据抓取功能。
计数器表: 创建一张新表,里面保存点击次数。网站每次点击都需要更新此表。在进行更新的时候可能会添加行锁,因此当并发更新时候需要加上mutex,并发性不好。解决这个问题只需要添加一行,选择slot,通过RAND()*100随机选择一个slot进行更新,当slot为1时候就是最初问题,当slot增大时候,更新并发性就更好,此时统计网站数目仅仅需要sum所有slot的访问次数即可。
Alter table是个复杂的操作,其操作是create table table2 like table1,然后修改table2,然后将数从table1中拷贝至table2.非常低效的操作。
其实表的值属性默认值存储子.frm文件中。仅需要修改.frm文件即可,alter column就是这么做的。
加快alter table骇客的方式就是修改.frm表。
OK,今天就写到这里了,明天看看创建高性能的索引,顺便看看python。
以上是关于mysql-阅读笔记1的主要内容,如果未能解决你的问题,请参考以下文章