华清远见重庆中心mysql数据库部分面试题总结

1 数据库的三范式是什么?

第一范式(1NF):原子性(存储的数据应该具有“不可再分性”)

第二范式(2NF):唯一性 (消除非主键部分依赖联合主键中的部分字段)(一定要在第一范式已经满足的情况下)

第三范式(3NF):独立性,消除传递依赖(非主键值不依赖于另一个非主键值)

总结

  1. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几?

表类型如果是 MyISAM ,那 id 就是 18。

表类型如果是 InnoDB,那 id 就是 15

InnoDB 表只会把自增主键的最大 id 记录在内存中,所以重启之后会导致最大 id 丢失。

3、如何获取当前数据库版本?

 select version()

  1. char 和 varchar 的区别是什么?

1:char类型的长度是固定的,varchar的长度是可变的。

2:char类型的效率比varchar的效率稍高.

3:charvarchar节省空间,但是在效率上varchar稍差些。

  1. MySQL 的内连接、左连接、右连接有什么区别?
  1. 内连接:结合两张表的记录,返回相关的查询结果,返回的是两个表的交集部分。
  2. 关键字:INNER JOIN
  3. 左连接:左连接查询,左表的信息全部展示出来,右表只会展示符合搜索条件的信息,不足的地方记为NULL
  4. 关键字:LEFT JOIN

3、右连接:右连接查询,右表的信息全部展示出来,左表只会展示符合搜索条件的信息,不足的地方记为NULL

关键字:RIGHT JOIN

6.MySQL 索引是怎么实现的?

索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。

     B+ 树索引,B+ 树的搜索效率,可以到达二分法的性能,找到数据区域之后就找到了完整的数据结构了,所有索引的性能也是更好的。

    哈希索引,底层是哈希表,查询速度快

7、怎么验证 MySQL 的索引是否满足需求?

 使用 explain 查看 SQL 是如何执行查询语句的,从而分析你的索引是否满足需求。

explain 语法:explain select * from table where type=1  

  1. 说一下数据库的事务隔离?

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted(读未提交) 、Read committed (读已提交)、Repeatable read (重复读)、Serializable (序列化)。读现象是在多个事务并发执行时,在读取数据方面可能碰到的问题。包括脏读、不可重复读、幻读。

mysql默认隔离级别:REPEATABLE-READ,可以避免脏读,不可重复读,不可避免幻读

  1. 说一下 MySQL 常用的引擎?

存储引擎基于数据表, 而不是基于数据库, 请根据业务需求为数据表选择最优的存储引擎。

创建新表时, 如果不指定存储引擎, 则使用默认的存储引擎。

MySQL5.5 之前默认存储引擎为 MyISAMMySQL5.5 之后默认存储引擎为 InnoDB

  1. 说一下 MySQL 的行锁和表锁?

MyISAM 只支持表锁,InnoDB 支持表锁和行锁,默认为行锁。

- 表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。

- 行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。

 

  1. 说一下乐观锁和悲观锁?

- 乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。 - 悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻止,直到这个锁被释放。

12.MySQL 问题排查都有哪些手段?

  • 使用 show processlist 命令查看当前所有连接信息。
  • 使用 explain 命令查询 SQL 语句执行计划。
  • 开启慢查询日志,查看慢查询的 SQL。

13、 如何做 MySQL 的性能优化?

  1. mysql 对一个大表做在线ddl,怎么进行实施的才能尽可能降低影响?

1:建立一个和“test”一样表结构的新表,表名为test_new。create table test_new like test;

2:将test表中数据拷贝到test_new中。insert into test_new select * from test;

3:在test_new上执行ddl操作

4:最后将执行过ddl更新的test_new表改名为test,原test表改名为test_old。Rename table test to test_old, test_new to test;

5:确认检查无误后drop掉test_old表  

  1. Redis 是什么?都有哪些使用场景?

Redis是一款内存高速缓存数据库。Redis全称为:Remote     Dictionary    Server (远程数据服务),使用C语言编写,Redis是一个key-value存储系统(键值存储系统),支持丰富的数据类型,Redis是一种支持key-value等多种数据结构的存储系统

应用场景:    1、会话缓存(最常用) 

        2、消息队列(支付)

        3、活动排行榜或计数

        4、发布,订阅消息(消息通知)

        5、商品列表,评论列表

  1. Redis 有哪些功能?

可用于缓存,事件发布或订阅,高速队列等场景。使用C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。

17、Redis 支持的数据类型有哪些?

 Redis一共支持五种数据类型:String(字符串)、hash(哈希)、list(列表)、set(集合)和zset(sorted  set有序集合)

  1. 怎么保证缓存和数据库数据的一致性?

1:先更新数据库,再更新缓存(有bug)

并发更新数据库场景下,会将脏数据刷新到缓存,不推荐

2:先更新缓存,再更新数据库(有bug)

缓存更新成功后,数据库更新失败,则会造成数据不一致性,而且也有并发问题,不推荐

3:先删除缓存,在更新数据库(有bug)

改进方法:先删缓存,再更新数据库,再删缓存

4:先更新数据库,再删除缓存(有bug)

更新数据库成功,但是删除缓存失败。

  1. Redis 如何做内存优化?
  • 键值对优化;
  • 小数据集合的编码优化;
  • 使用对象共享池;
  • 使用 Bit 比特位或 byte 级别操作
  • 使用 hash 类型优化;
  • 内存碎片优化;
  • 使用 32 位的 Redis。

  1. Redis 常见的性能问题有哪些?该如何解决?

(1)  Master 些内存快照, save 命令快照,save 命令调度 rdbSave 函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以 Master 最好不要写内存快照。

(2) Master AOF 持久化,如果不重写 AOF 文件,这个持久化方式对性能的影响是最小的,但是 AOF 文件会不断增大,AOF 文件过大会影响 Master 重启的恢复速度。Master 最好不要做任何持久化工作,包括快照和 AOF 日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个 Slave 开启 AOF 备份数据,策略为每秒同步一次。

(3) Master 调用 BGREWRITEAOF 重写 AOF 文件,AOF 在重写的时候会占大量的 CPU 和内存资源,导致服务器 load 过高,出现短暂服务暂停现象。

(4) Redis 主要从复制的性能问题,为了主从复制的速度和连接的稳定性,Salve 和 Master 最好在同一个局域网内。

20Redis 常见的性能问题有哪些?该如何解决?

Master  写内存快照   save命令 会调rdbsave 函数 会阻塞主线程的工作  会间断性暂停服务  所以 Master  最好不要写内存快照

Master  aof  持久化    如果 不重写 aof 文件  这个持久化 方式 对性能的影响 是 最小的  但是 aof 文件 会 不断 增大 包括 内存快照 和 aof 日志文件 特别 是不要启用 快照 持久化 如果 数据比较 关键  某个slave 开启aof 备份数据  策略 每秒同步一次

Master   调用 bgrewriteaof 重写aof 文件 aof 在重写的时候 会占大量的 cpu 和内存资源  导致 服务 load  过高  出现短暂的服务暂停现象

redis 主从复制性能 为了主从复制的速度和稳定性 slave 和Master  最好曾同意局域网内

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值