您的位置:首页 > 数据库 > MySQL

mysql-阅读笔记1

2016-04-04 21:48 375 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: