码迷,mamicode.com
首页 > 数据库 > 详细

mysql-阅读笔记1

时间:2016-04-04 22:26:27      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/championlai/p/5353051.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!