首页 > 编程知识 正文

mysql面试题及答案,数据库面试题及答案2020

时间:2023-05-04 05:47:16 阅读:48033 作者:468

表和分区的区别:

一、什么是mysql分表,分区

什么是分表,从表面意义上说,是把一个表分成n个以上的小表。 具体请看:mysql分表的三种方法

什么是分区? 分区是指将一个表中的数据划分为n个以上的块。 这些块可以位于同一磁盘上,也可以位于不同的磁盘上。

第二,mysql表和分区之间的区别

1、在实现方式上

a )、mysql的分表是真正的分表,一个表分成很多表后,每个小表都是完整的一张表。

它对应于三个文件、一个. MYD数据文件、 MYI索引文件和. frm表结构文件。

Sql代码

[ root @ blackghosttest ] # ls|grep user

alluser.MRG

alluser.frm

user1.MYD

user1.MYI

user1.frm

user2.MYD

user2.MYI

user2.frm

简单来说,上面的分表是利用了merge存储引擎(分表的一种),alluser是总表,下面有user1、user2两个分表。 他们俩都是独立的表格,取数据的时候,我们可以在总表格里取。 其中总表没有两个文件:MYD、 MYI。 也就是说,总表中他不是表,没有数据,数据都在分表中。 看看核磁共振是什么

Sql代码

[ root @ blackghosttest ] # cat alluser.mrg|more

用户1

用户2

#INSERT_METHOD=LAST

综上所述,您可以看到alluser.MRG包含多种表格分隔关系和插入数据的方式。 可以把总表理解为一个壳,或者是连接池。

b )分区不同,用大表创建分区后,他仍然是一个表,不是两张表,但存储数据的块更多了。

Sql代码

[ root @ blackghosttest ] # ls|grep aa

aa#P#p1.MYD

aa#P#p1.MYI

aa#P#p2.MYD

aa#P#p2.MYI

aa.frm

aa.par

从上面可以看出,aa这个表分为p1和p2两个区。 我们都知道一张表对应三个文件. MYD、 MYI和. frm。

分区根据一定的规则拆分了数据文件和索引文件,还增加了一个. par文件。 打开. par文件后,可以看到是他记录的。 此表中的分区信息与路由表中的. MRG有点类似。 分区后也是一张,而不是多张表。

例如orderid、userid、ordertime、

订单时间2015-01-01 # P0

订单时间2015-04-01 # P1

订单时间2015-07-01 # p2

订单时间2015-10-01 # P3

订单时间2016-01-01 # P4

按时间划分。 大多数只查询最近的订单数据,大部分只访问一个分区。 与整个表的mrdbd相比,数据库缓存更好,性能也更好。 这是按数据库划分的,APP应用程序是透明的,不需要更改。

2 .数据处理上

a )、分表后,数据均存储在分表中,总表只是外壳,访问数据发生在一个个分表中。 请看看以下示例:

select * from alluser where id='12 '表面上看起来像是在操作表alluser,其实不然。 是操作了alluser中的分表。

b ),分区怎么样? 表格分类概念不存在。 分区只是将存储数据的文件分成了许多小块。 分区的桌子怎么样? 还是桌子? 数据处理还是自己进行。

3、在提高性能方面

a ),分表后,单表的并发性得到了提高,磁盘I/O性能也得到了提高。 合并能力为什么会有所提高,是因为一次搜索的时间缩短了,如果发生高合并,总表可以按查询分为不同的小表。 磁盘I/O性能是如何提高的呢? 原本非常大的. MYD文件现在也分配给了每个小表格中的. MYD。

b )、mysql提出了分区的概念,希望突破磁盘I/O瓶颈。 我想提高磁盘的读写能力,提高mysql的性能。

在这一点上,分区和表的测量点不同,表点在于访问数据时如何提高mysql的并发性; 分区是指如何突破磁盘读写能力,提高mysql的性能。

4 )、实现难度

a )、分表的方法有很多,用merge分表是最简单的方法。 这种方式路由分区难度小,对程序代码透明。 其他分表方式比分区麻烦。

b ),分钟

区实现是比较简单的,建立分区表,根建平常的表没什么区别,并且对开代码端来说是透明的。

三,mysql分表和分区有什么联系呢

1,都能提高mysql的性高,在高并发状态下都有一个良好的表面。

2,分表和分区不矛盾,可以相互配合的,对于那些大访问量,并且表数据比较多的表,我们可以采取分表和分区结合的方式(如果merge这种分表方式,不能和分区配合的话,可以用其他的分表试),访问量不大,但是表数据很多的表,我们可以采取分区的方式等。

分库分表区别:

1 基本思想之什么是分库分表?

从字面上简单理解,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。

2 基本思想之为什么要分库分表?

数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈,。

3 分库分表的实施策略。

sharding  分片;分区

如果你的单机性能很低了,那可以尝试【分库】。

【分库】: 业务透明,在物理实现上分成多个服务器,不同的分库在不同服务器上。

【分区】: 可以把表分到不同的硬盘上,但不能分配到不同服务器上。

一台机器的性能是有限制的,用分库可以解决单台服务器性能不够,或者成本过高问题。

当【分区】之后,表还是很大,处理不过来,这时候可以用【分库】。

orderid,userid,ordertime,.....

userid%4=0,用分库1

userid%4=1,用分库2

userid%4=2, 用分库3

userid%4=3,用分库4

上面这个就是一个简单的分库路由,根据userid选择分库,即不同的服务器

分库分表有垂直切分和水平切分两种。

3.1 何谓垂直切分,即将表按照功能模块、关系密切程度划分出来,部署到不同的库上。例如,我们会建立定义数据库workDB、商品数据库payDB、用户数据库userDB、日志数据库logDB等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。

如userid,name,addr一个表,为了防止表过大,分成2个表。

userid,name

userid,addr

3.2 何谓水平切分,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,例如userID散列、按性别、按省,进行划分,然后存储到多个结构相同的表,和不同的库上。例如,我们的userDB中的用户数据表中,每一个表的数据量都很大,就可以把userDB切分为结构相同的多个userDB:part0DB、part1DB等,再将userDB上的用户数据表userTable,切分为很多userTable:userTable0、userTable1等,然后将这些表按照一定的规则存储到多个userDB上。

3.3 应该使用哪一种方式来实施数据库分库分表,这要看数据库中数据量的瓶颈所在,并综合项目的业务类型进行考虑。

如果数据库是因为表太多而造成海量数据,并且项目的各项业务逻辑划分清晰、低耦合,那么规则简单明了、容易实施的垂直切分必是首选。

而如果数据库中的表并不多,但单表的数据量很大、或数据热度很高,这种情况之下就应该选择水平切分,水平切分比垂直切分要复杂一些,它将原本逻辑上属于一体的数据进行了物理分割,除了在分割时要对分割的粒度做好评估,考虑数据平均和负载平均,后期也将对项目人员及应用程序产生额外的数据管理负担。

在现实项目中,往往是这两种情况兼而有之,这就需要做出权衡,甚至既需要垂直切分,又需要水平切分。我们的游戏项目便综合使用了垂直与水平切分,我们首先对数据库进行垂直切分,然后,再针对一部分表,通常是用户数据表,进行水平切分。

4 分库分表存在的问题。

4.1 事务问题。

在执行分库分表之后,由于数据存储到了不同的库上,数据库事务管理出现了困难。如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价;如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担。

4.2 跨库跨表的join问题。

在执行了分库分表之后,难以避免会将原本逻辑关联性很强的数据划分到不同的表、不同的库上,这时,表的关联操作将受到限制,我们无法join位于不同分库的表,也无法join分表粒度不同的表,结果原本一次查询能够完成的业务,可能需要多次查询才能完成。

4.3 额外的数据管理负担和数据运算压力。

额外的数据管理负担,最显而易见的就是数据的定位问题和数据的增删改查的重复执行问题,这些都可以通过应用程序解决,但必然引起额外的逻辑运算,例如,对于一个记录用户成绩的用户数据表userTable,业务要求查出成绩最好的100位,在进行分表之前,只需一个order by语句就可以搞定,但是在进行分表之后,将需要n个order by语句,分别查出每一个分表的前100名用户数据,然后再对这些数据进行合并计算,才能得出结果。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。