面试数据库八股文十问十答第八期

打印 上一主题 下一主题

主题 672|帖子 672|积分 2016

面试数据库八股文十问十答第八期

   作者:程序员小白条,个人博客
  信赖看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!
⭐点赞⭐收藏⭐不迷路!⭐
1)MySQL 锁类型

MySQL 中常见的锁类型包括:


  • 行级锁(Row-Level Locks):在行级别举行加锁,使得其他事件无法修改或删除已锁定的行。MySQL 使用的是一种称为多版本并发控制(MVCC)的行级锁。
  • 表级锁(Table-Level Locks):在整个表上举行锁定,限定其他事件对整个表的访问。这种锁定级别一般会导致并发性能下降,因为它会阻止其他事件对表的读写操作。
  • 页级锁(Page-Level Locks):在数据页级别举行加锁,这是一种介于行级锁和表级锁之间的锁定级别。不外,MySQL InnoDB 存储引擎并不直接支持页级锁。
  • 意向锁(Intention Locks):用于表锁定时,通知其他事件该表即将被加锁的类型,以克制死锁环境的发生。
2)乐观锁和悲观锁的区别



  • 悲观锁:在操作数据时,以为其他事件可能会修改数据,因此在操作之前会先对数据举行加锁,确保在整个事件过程中数据不会被其他事件修改。例如,在读取数据时,会加上排他锁,防止其他事件修改数据,直到当前事件开释锁为止。
  • 乐观锁:相对于悲观锁,乐观锁假设在整个事件过程中数据不会被其他事件修改,因此不会在操作之前对数据举行加锁。而是在提交事件时,会查抄数据是否被其他事件修改过。假如没有,则提交成功;假如发现数据已经被修改,就会执行回滚操作,让用户决定如那边理。
3)解决死锁的方法

解决死锁的方法通常包括以下几种:


  • 超机遇制:设置事件超时时间,在超时后自动回滚事件,克制死锁长时间占用资源。
  • 死锁检测和回滚:MySQL 会自动检测死锁,并选择一个事件举行回滚,解除死锁。
  • 优化事件:公道设计事件,只管减少事件持有锁的时间,低落死锁的概率。
  • 锁定对象顺序:通过按照统一的顺序对数据库对象举行加锁,可以减少死锁的发生。例如,始终按照相同的顺序对表举行加锁,可以克制由于不同的事件加锁顺序不一致而导致的死锁。
  • 重试机制:当发生死锁时,通过重试事件的方式,重新执行事件,直到成功为止。
4)使用 EXPLAIN 分析查询语句

EXPLAIN 是 MySQL 提供的一个关键词,用于分析 SELECT 查询语句的执行计划。通过 EXPLAIN 关键词,可以查察 MySQL 是如何执行查询语句的,以及使用了哪些索引、表连接方式等信息。
分析查询语句的步骤通常如下:

  • 使用 EXPLAIN 关键词加上要分析的查询语句,例如:EXPLAIN SELECT * FROM table_name WHERE condition;
  • 查察 EXPLAIN 的输出结果,包括 id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra 等字段,这些字段提供了查询执行计划的详细信息。
  • 根据输出结果,分析查询语句的执行计划,判定是否需要优化查询语句或者添加索引等操作。
5)count(*)、count(1)、count(字段名) 的区别



  • count(*):统计表中全部行的数目,包括 NULL 值行。
  • count(1):统计全部行中非 NULL 值的行数,因为传递给 COUNT 函数的参数是常量,以是实际上并不会统计任何具体的列值,而是简单地统计行的数目。
  • count(字段名):统计指定字段中非 NULL 值的行数。
在实际使用中,一般环境下这三种形式的服从差异不大,但在特定环境下可能会有微小的性能差异。
6)int(11) 中的数字 11 的寄义

int(11) 中的数字 11 代表了字段的表现宽度,并不代表存储的数据大小或者范围。在 MySQL 中,int 类型的字段默认表现宽度是 11,这只是一种指定数据表现宽度的方式,不影响存储大小或者数据范围。因此,int(11) 和 int(20) 存储的数据范围是相同的,只是表现宽度不同而已。这个数字在大多数环境下只是用于控制客户端表现的格式,并不影响实际存储或盘算。
7)varchar 和 char 的区别



  • char

    • char 是一种固定长度的字符串类型。
    • 存储时会按照指定的长度举行存储,假如存储的字符串长度小于指定长度,会用空格举行填充。
    • 例如,char(10) 指定了长度为 10 的字符串,无论存储的实际字符串长度是多少,都会占用 10 个字符的存储空间。

  • varchar

    • varchar 是一种可变长度的字符串类型。
    • 存储时只占用实际字符串长度加上一个字节(用于存储长度信息)的存储空间。
    • 例如,varchar(10) 指定了最大长度为 10 的字符串,假如存储的实际字符串长度为 5,则只占用 6 个字符的存储空间。

8)SQL 调优的一般方法

SQL 调优是数据库性能优化的一个重要方面,一般的方法包括但不限于:


  • 分析查询语句:使用 EXPLAIN 分析查询执行计划,查察是否使用了索引、是否举行了全表扫描等。
  • 优化查询语句:修改查询语句结构,克制复杂的连接或子查询,使用更有效的查询方式。
  • 使用索引:根据查询的字段和条件使用符合的索引,克制全表扫描。
  • 优化表结构:公道设计表结构,克制过多冗余字段,规范化数据库结构。
  • 性能测试:通过性能测试工具或者监控工具,对查询性能举行评估和优化。
9)MySQL 数据的排序实现方式

MySQL 使用多种方式来实现数据排序,主要取决于查询中使用的排序字段和索引环境:


  • 使用索引排序:假如查询中使用的排序字段有符合的索引,MySQL 可以使用索引来举行排序,这样可以加速排序操作。
  • 使用文件排序:假如没有符合的索引可用,MySQL 将使用文件排序。它会将结果集存储在临时文件中,并举行排序操作。
  • 排序算法:MySQL 使用多种排序算法,包括快速排序、合并排序等,具体选择算法的方式取决于数据量和版本。
10)MySQL 克制单点故障问题的方法

为了克制 MySQL 单点故障问题,一般会采取以下措施:


  • 使用主从复制:设置主从复制,将读操作分散到多个数据库实例,同时也提高了故障恢复本领。
  • 使用数据库集群:通过设置数据库集群,将数据分散到多个节点上,提高了数据库的可用性和扩展性。
  • 使用数据库署理:通过数据库署理软件如 MySQL Router 或 ProxySQL,将请求分发到多个数据库服务器上。
  • 备份与恢复计谋:创建定期的备份和恢复计谋,确保在主节点故障时可以快速切换到备用节点。
  • 硬件负载平衡:使用负载平衡器将请求平衡分配到多个数据库服务器上,防止单个节点过载或故障。
这些方法结合起来可以有效地提高 MySQL 数据库的可用性和稳定性,克制因为单点故障而导致的系统中断或性能下降问题。
开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
前后端总计已经 1300+ Star,2W+ 访问!
⭐点赞⭐收藏⭐不迷路!⭐

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

星球的眼睛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表