1 Star 0 Fork 31

邪恶的笨笨熊 / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
大厂P8整理Mysql面试题答案,助你“脱颖而出”!.md 8.26 KB
一键复制 编辑 原始数据 按行查看 历史

大厂P8整理Mysql面试题答案,助你“脱颖而出”!

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

MySQL

题1:MySQL 中单表记录数过大时如何优化?

当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施:

1、限定数据的范围:务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内。;

2、读/写分离:经典的数据库拆分方案,主库负责写,从库负责读;

3、缓存:使用MySQL的缓存,另外对重量级、更新少的数据可以考虑使用应用级别的缓存;

4、垂直分区

根据数据库里面数据表的相关性进行拆分。 例如用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表,甚至放到单独的库做分库。

简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。

垂直拆分的优点:可以使得行数据变小,在查询时减少读取的Block数,减少I/O次数。此外,垂直分区可以简化表的结构,易于维护。

垂直拆分的缺点:主键会出现冗余,需要管理冗余列,并会引起Join操作,可以通过在应用层进行Join来解决。此外,垂直分区会让事务变得更加复杂;

5、水平分区

保持数据表结构不变,通过某种策略存储数据分片。这样每一片数据分散到不同的表或者库中,达到了分布式的目的。 水平拆分可以支撑非常大的数据量。

水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。

题2:SQL 连接查询时 on 和 where 有什么区别?

SQL中的连接查询分为3种,cross join(交叉连接)、inner join(内连接)和outer join(外连接)。

在cross join和inner join中,筛选条件放在on后面还是where后面是没区别的,在编写这两种连接查询的时候,只用on不使用where也没有什么问题。

on筛选和where筛选的差别只是针对outer join,也就是平时最常使用的left join和right join。

以左连接为例:

1、用on的时候,只对右表做筛选条件,而左表不受控制

2、用where的时候,对临时表的组合后的结果进行筛选,所以对左右表都是有作用的。

总的来说outer join的执行过程分为4步:

1、先对两个表执行交叉连接(笛卡尔积)

2、应用on筛选器

3、添加外部行

4、应用where筛选器

题3:mysql_fetch_array 和 mysql_fetch_object有什么区别?

mysql_fetch_array()–将结果行作为关联数组或来自数据库的常规数组返回。

mysql_fetch_object()–从数据库返回结果行作为对象。

题4:什么是表分区?

表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。

题5:MySQL 中有哪些非标准字符串类型?

TINYTEXT

TEXT

MEDIUMTEXT

LONGTEXT

题6:MySQL 索引优化原则都有哪些?

对查询频次较高,且数据量比较大的表建立索引。

索引字段的选择,最佳候选列应当从where子句的条件中提取。

使用唯一索引,区分度越高,使用索引的效率越高。

使用短索引,索引创建之后也是使用硬盘来存储的,因此提升索引访问的I/O效率。

利用最左前缀,N个列组合而成的组合索引,那么相当于是创建了N个索引。

题7:分区表都有哪些限制因素?

1、一个表最多只能有1024个分区。

2、MySQL5.1中,分区表达式必须是整数,或者返回整数的表达式。在MySQL5.5中提供了非整数表达式分区的支持。

3、如果分区字段中有主键或者唯一索引的列,那么多有主键列和唯一索引列都必须包含进来。即:分区字段要么不包含主键或者索引列,要么包含全部主键和索引列。

4、分区表中无法使用外键约束。

5、MySQL的分区适用于一个表的所有数据和索引,不能只对表数据分区而不对索引分区,也不能只对索引分区而不对表分区,也不能只对表的一部分数据分区。

题8:为什么说 B+ 比 B 树更适合实际应用中文件数据库索引?

1、B+的磁盘读写代价更低。

B+的内部结点并没有指向关键字具体信息的指针,因此其内部结点相对B树更小。

如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。

2、B+-tree的查询效率更加稳定。

由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

题9:MySQL 中是否支持 emoji 表情存储,若不支持,如何操作?

MySQL中是默认不支持emoji表情存储。

需要更换数据库表中字符集utf8-->utf8mb4。

题10:什么是非聚簇索引?

非聚集索引也称为Secondary Index。指的是非叶子节点按照索引的键值顺序存放,叶子节点存放索引键值以及对应的主键键值。

MySQL里除了INNODB表主键外,其他的都是二级索引。MYISAM、memory等引擎的表索引都是非聚集索引。简单点说,就是索引与行数据分开存储。一张表可以有多个二级索引。

题11:为什么要使用自增-id-作为主键

题12:什么是内连接外连接交叉连接笛卡尔积

题13:mysql-中如何找出最后一次插入时分配的自动增量

题14:mysql-中-cpu占用率飙升如何处理

题15:mysql-中数据一日十万增量预计三年运维如何优化

题16:sql-语句执行过久如何优化从哪些方面入手

题17:触发器的使用场景有哪些

题18:mysql-中-sql-约束有哪几种

题19:mysql-调优数据库都有哪些方法

题20:什么是存储过程如何调用

题21:在什么情况下应少创建或不创建索引

题22:b-树和-b-树有什么区别

题23:数据库表创建都有哪些注意事项

题24:mysql-中-dropdelete-与-truncate-有什么区别

题25:mysql-的索引有哪些设计原则

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/zhuxinyu114/ebooks.git
git@gitee.com:zhuxinyu114/ebooks.git
zhuxinyu114
ebooks
Ebooks
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891