Mysql纵向横向表结构

上传人:z**** 文档编号:108778570 上传时间:2022-06-16 格式:DOC 页数:3 大小:42.50KB
收藏 版权申诉 举报 下载
Mysql纵向横向表结构_第1页
第1页 / 共3页
Mysql纵向横向表结构_第2页
第2页 / 共3页
Mysql纵向横向表结构_第3页
第3页 / 共3页
资源描述:

《Mysql纵向横向表结构》由会员分享,可在线阅读,更多相关《Mysql纵向横向表结构(3页珍藏版)》请在装配图网上搜索。

1、纵表的好处是灵活,当业务系统发生扩展时可以很好的适应。纵表,典型字段两个:fieldname,value横表根据现行业务逻辑定制,设计简单,易操作。缺点当然是当业务逻辑扩展时,大多数情况下要更改表结构。横纵拆表,横向就是把一类数据分表存储,纵向就是一张表建多个历史表,比如112月各一张,使用视图查询。先来说说横表和纵坐表的概念,先来看看以下两图:ETUDEITTHO;STUDEKTNAMESEX-男男STUIEHTN0studentjniame-12411Z00&002-student旧-etuderLt_Eex*-stud-en.tnajristud-entsex壬五”男FIELDNAME三

2、四7T張男李男王男FIELDVALUE第一张图就是横表,一行表示了一个实体记录,这就是我们传统的设计表的形式第二张图就是纵表,他的一行记录,是用于表示某个学生的属性名和属性值对应关系,像这边有两个属性(名字和性别),在纵表中就要用两条记录来表示一个学生。从上面可以观察出,横表的好处是清晰可见,一目了然,但是有一个弊端,如果现在要把这个表加一个字段,那么就必须重建表结构。对于这种情况,在纵表中只需要添加一条记录,就可以添加一个字段,所消耗的代价远比横表小,但是纵表的对于数据描述不是很清晰,而且会造成数据库数量很多,两者利弊在于此。所以,应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表

3、结构设计成纵表。在实际开发中,经常需要互相转换横表和纵表的形式,这里贴个从纵表数据转成横表显示的形式。纵表转横表1234Selectstudent_no,max(decode(field_name,student_name,field_value)Asstudent_name,max(decode(field_name,student_sex,field_value)Asstudent_sexFromcucstudentyGroupBystudentno;纵向分表纵向分表是指将一个有20列的表根据列拆分成两个表一个表10列一个表11列,这样单个表的容量就会减少很多,可以提高查询的性能,并在一定

4、程度上减少锁行,锁表带来的性能损耗。纵向分表的原则是什么呢,应该怎样拆分呢?答案是根据业务逻辑的需要来拆分,对于一张表如果业务上分两次访问某一张表其中一部分数据,那么就可以根据每次访问列的不同来做拆分;另外还可以根据列更新的频率来拆分,例如某些列每天要更新3次,有些列从创建开始基本上很少更新。举例:假定场景,我有一张用户表,这张表包含列:ID,UserName,Password,RealName,Gender,Email,IsEmailValid,Birthday,Country,City,Address,Mobile,Phone,ZipCode,Hometown,OfficePhone,Co

5、mpany,Position,Industry,LatestLoginTime,LatestLoginIP,LoginTimes,OnlineMinutes假定现在我们的登录出现了性能问题,用户登录经常出现数据库超时的现象。我们打算用拆表的方法解决这个问题。先看下涉及到登录的字段有:UserName,Password,LatestLoginTime,LatestLoginIP,LoginTimes;那么我们就可以以此为依据将原表拆分为:UserLogin和UserBase两个表,后者包含除了登录信息的其他列信息;两张表都要包含主键ID。1. 横向分区横向分区是将表从行的角度拆分,例如将创建时间

6、在05年之前的数据放在一个分区上,将05年到08年之间的数据放到另一个分区上,以此类推。横向分区所根据的列必须在聚集索引上,通常会根据时间,主键id等进行划分。横向分区将数据划分为不同的区,在根据分区列条件进行查询时可以缩小查询的范围,从而提高查询的性能;另外如果数据库服务器有多个cpu,则可以通过并行操作获得更好的性能。到底要根据那个列进行横向的分区和查询有关系,我们在建表的时候需要分析,会根据那个列进行查询。举例:1. 订单是一个实效性很强的实体,我们很少查询几年前的订单数据,我们就可以在订单的创建时间列上创建分区函数来做分区。比如帖子通常情况下只有在首页推荐的最新的帖子被访问次数很多,而

7、几年前的帖子被访问的几率较小,这时候我们可以根据帖子的主键id来做分区,id小于300W的在一个分区上,id在300到600w之间的在一个分区上。一,什么是mysql分表,分区什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,具体请参考mysql分区功能详细介绍,以及实例二,mysql分表和分区有什么区别呢1,实现方式上a),mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表,都对应三个文件,一个.MYD数据文件,.MYI索引文

8、件,.frm表结构文件。简单说明一下,上面的分表呢是利用了merge存储引擎(分表的一种),alluser是总表,下面有二个分表,userl,user2。他们二个都是独立的表,取数据的时候,我们可以通过总表来取。这里总表是没有.MYD,.MYI这二个文件的,也就是说,总表他不是一张表,没有数据,数据都放在分表里面。我们来看看.MRG到底是什么东西rootBlackGhosttest#catalluser.MRG|moreuser1user2#INSERT_METHOD=LASTrootBlackGhosttest#catalluser.MRG|moreuser1user2#INSERT_MET

9、HOD=LAST从上面我们可以看出,alluser.MRG里面就存了一些分表的关系,以及插入数据的方式。可以把总表理解成一个外壳,或者是联接池。b),分区不一样,一张大表进行分区后,他还是一张表,不会变成二张表,但是他存放数据的区块变多了。从上面我们可以看出,aa这张表,分为二个区,pl和p3,本来是三个区,被我删了一个区。我们都知道一张表对应三个文件.MYD,.MYI,.frm。分区呢根据一定的规则把数据文件和索引文件进行了分割,还多出了一个.par文件,打开.par文件后你可以看出他记录了,这张表的分区信息,根分表中的.MRG有点像。分区后,还是一张,而不是多张表。2,数据处理上a),分表

10、后,数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面。看下面的例子:select*fromalluserwhereid=12表面上看,是对表alluser进行操作的,其实不是的。是对alluser里面的分表进行了操作。b),分区呢,不存在分表的概念,分区只不过把存放数据的文件分成了许多小块,分区后的表呢,还是一张表。数据处理还是由自己来完成。3,提高性能上a),分表后,单表的并发能力提高了,磁盘I/O性能也提高了。并发能力为什么提高了呢,因为查寻一次所花的时间变短了,如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面。磁盘I/O性能怎么搞高了呢,本

11、来一个非常大的.MYD文件现在也分摊到各个小表的.MYD中去了。b),mysql提出了分区的概念,我觉得就想突破磁盘I/O瓶颈,想提高磁盘的读写能力,来增加mysql性能。在这一点上,分区和分表的测重点不同,分表重点是存取数据时,如何提高mysql并发能力上;而分区呢,如何突破磁盘的读写能力,从而达到提高mysql性能的目的。a) 4),实现的难易度上,分表的方法有很多,用merge来分表,是最简单的一种方式。这种方式根分区难易度差不多,并且对程序代码来说可以做到透明的。如果是用其他分表方式就比分区麻烦了。b) ,分区实现是比较简单的,建立分区表,根建平常的表没什么区别,并且对开代码端来说是透明的。1, 三,mysql分表和分区有什么联系呢都能提高mysql的性高,在高并发状态下都有一个良好的表面。分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表,我们可以采取分区的方式等。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!