Java面试考题四:数据库相关

一.对两张表的结果进行合并起来,会有临时

union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;   (会去重,而去重所需要的开销很高,)

union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;(不会去冲,效率高)

二.分库分表的策略

首先查询的时候,怎么定位具体的表:查询之前,就要知道在哪张表;

1.按范围分表,如:id:1-1000万 放一张表;10001-2000万放一张表

2.月份,年份分表,1个月一张表,每年一张表

比如说按照时间范围来分库分表,每个库表中存放的都是连续时间范围的数据。但是这种方式一般很少用,因为很容易会产生热点问题,大量的流量都打在最新的数据上了。这种方案的优点在于扩容的时候非常简单,比如只要预备好每个月都准备一个库就可以了,到了下一个新的月份自动将数据写入新的库。缺点则是,如果大部分请求都是访问最新的数据,那么在这里,分库分表的设计目的就只是简单的扩容,而不是为了应对高并发了。

3.根据hash算法分表,每次通过标识算出表明

按照某个字段的hash值均匀分散,这个较为常用。优点在于可以平均分配每个库表的数据量和请求压力;缺点在于扩容比较麻烦,因为会存在一个数据迁移的过程,即之前的数据需要重新计算hash值并重新分配到不同的库表中。

 

三. myisam与innerDb 引擎区别

Innerdb引擎,索引与数据放在一起,叶子结点包含了完整的数据记录,两个文件,存结构,索引和数据,集聚索引,或聚簇索引。。

innerdb支持事务

数据库文件两个:

.frm:文件存储表定义

.iad:存储索引和数据

myisam引擎:索引与数据不在一起,就是非集聚索引(有三个文件,frm,存表结构,存数据,存索引,i d),数据存在磁盘data目录下

不支持事务

 

四:B树与B+tree区别

B+树:叶子结点数据有指针,可以查找范围,数据直接存储在叶子节点中

B树: 叶子节点只存储了索引,需要根据索引去查数据,

     没有指针,要查询范围,如,>20的值,每次都要从根节点load

 

五:1.分库分表,集群;创建表结构没问题,sql写的没问题;索引没问题;

 

Java面试考题四:数据库相关

上一篇:MySQL的Bugs


下一篇:MySql 如何判断字符串是否为数字