博客
关于我
史上最全的大厂Mysql面试题在这里!
阅读量:407 次
发布时间:2019-03-05

本文共 2767 字,大约阅读时间需要 9 分钟。

MySQL复制机制的基本原理是基于主从服务器的异步同步。主服务器记录所有修改数据库数据的SQL语句到binlog中,而从服务器负责定期从主服务器读取binlog内容,执行相应的操作。整个过程分为三个主要线程:binlog线程负责记录SQL语句,io线程负责读取并应用binlog内容,sql执行线程负责执行这些语句。这些线程相互协调,确保数据在主从服务器之间的一致性。

MySQL中MyISAM与InnoDB的区别

  • 事务支持:InnoDB支持事务处理,而MyISAM不支持。
  • 锁机制:InnoDB支持行级锁,而MyISAM采用表级锁。
  • MVCC支持:InnoDB支持多版本并发控制(MVCC),MyISAM不支持。
  • 外键约束:InnoDB支持外键约束,MyISAM不支持。
  • 全文索引:InnoDB不支持全文索引,而MyISAM支持。
  • InnoDB引擎的特性

    InnoDB引擎具备以下四大特性:

  • 插入缓冲(Insert Buffer):减少磁盘IO,提高插入性能。
  • 二次写(Double Write):在内存缓冲区和磁盘之间优化写操作。
  • 自适应哈希索引(Adaptive Hash Index):根据查询频率自动优化索引。
  • 预读(Read Ahead):预先读取可能需要的数据页,减少IO次数。
  • SELECT COUNT(*)的性能对比

    SELECT COUNT(*)在MyISAM中执行更快,因为MyISAM内部维护一个计数器,可以直接获取结果,而InnoDB需要扫描所有记录。

    VARCHAR与CHAR的区别

    • 数据存储:CHAR固定长度, VARCHAR可变长度。
    • 字符限制:VARCHAR(50)最多存储50个字符,且在排序时占用内存与实际字符长度相当。

    INT类型的含义

    • 存储宽度:INT(20)表示显示宽度为20,但存储占用4字节。
    • 零填充:如果未加参数,INT类型会自动填充前导零。
    • 最大值:INT类型的最大值为2147483647。

    为什么使用VARCHAR(50)

    • 灵活性:适合存储不确定长度的文本数据。
    • 性能优化:在索引和排序时,VARCHAR(50)与固定长度类似,且不会占用过多内存。

    事务日志实现

    事务日志通过InnoDB的日志缓冲(Innodb log buffer)实现,支持预写日志方式。每个事务在启动时获取LSN号码,并在提交时将日志缓冲写入磁盘,确保数据一致性。

    Binlog日志格式

    MySQL支持三种Binlog格式:

  • STATEMENT:记录每条修改数据的SQL语句。
  • ROW:记录每一行数据的修改内容。
  • MIXED:根据SQL语句类型选择记录格式。
  • MySQL性能问题解决

    当CPU飙升到500%时,应:

  • 检查进程列表,终止长时间未活跃的进程。
  • 查看慢查询日志和错误日志,分析高负载原因。
  • 优化查询,减少全表扫描,增加索引使用。
  • SQL优化方法

    EXPLAIN结果解读

    • SELECT_TYPE:查询类型(SELECT,SELECT DISTINCT,SELECT UNION, etc.)。
    • KEY:实际使用的索引。
    • KEY_LEN:索引的长度。
    • REF:查询时使用的索引列。
    • EXTRA:优化建议或注意事项。

    PROFILE:用于分析SQL执行时间和资源消耗。

    数据库备份优化

    备份计划:根据业务需求定制备份策略,如全量备份、增量备份、部分表备份等。

    Mysqldump:通过读取日志文件生成备份文件,适合大规模数据备份。

    XtraBackup:直接读取InnoDB数据文件,适合高效备份。

    主从一致性校验

    使用工具如PT-table-checksum或mysqldiff进行主从校验,确保数据一致性。

    数据库支持Emoji

    • UTF-8:默认支持Emoji,但需使用utf8mb4字符集。
    • 升级方法:执行ALTER TABLE table_name CONVERT TO ROWSOMASK = utf8mb4;.

    数据字典维护

    • 注释:在生产数据库中添加注释,方便团队理解字段含义。
    • 工具导出:使用工具将注释导出为文档,分享给相关人员。

    大字段处理

    • 拆分:若查询频繁,建议将大字段拆分为多个较小字段,优化查询性能。
    • 索引优化:为常查询字段建立索引,减少连接时间。

    InnoDB行锁实现

    行锁基于索引列实现,通过锁定索引列的值来锁定对应的行。例如:

    SELECT * FROM `tab_with_index` WHERE `id` = 1 FOR UPDATE;

    如果id不是索引列,会锁定整张表。

    高效查询数据库表

    • 索引优化:确保查询字段有索引。
    • 分区表:将大表分区处理,减少查询压力。
    • 查询优化:避免全表扫描,使用覆盖索引。

    存储过程优缺点

    • 优点
      • 提高执行效率,减少网络通信量。
      • 提供一致性,避免多次运行相同代码。
    • 缺点
      • 存储程序依赖于数据库版本,迁移困难。
      • 存储程序可能导致锁竞争,影响并发性能。

    索引作用与优缺点

    • 作用
      • 加快查询速度。
      • 减少插入、删除等操作时间。
      • 提供唯一性约束。
    • 优缺点
      • 索引占用额外存储空间。
      • 索引需要维护,带来额外开销。

    事务概念

    事务是数据库操作的基本单位,确保所有操作要么全部成功,要么全部失败,保持数据一致性。

    悲观锁与乐观锁

    • 悲观锁:假设会发生并发冲突,阻止其他事务修改数据。
    • 乐观锁:假设不会发生冲突,提交时检查数据一致性,必要时回滚。

    数据库锁机制

    • 行锁:锁定一行数据,粒度更细。
    • 表锁:锁定整个表,粒度较大。
    • 共享锁/排他锁:不同锁级别,决定锁冲突处理方式。

    drop、delete与truncate

    • drop:删除表及其数据,属于DDL操作。
    • delete:删除指定行数据,属于DML操作。
    • truncate:删除表中的所有数据,保留表结构,属于DML操作。

    错误日志类型

    • 错误日志:记录严重错误和崩溃信息。
    • 查询日志:记录所有数据库请求信息。
    • 慢查询日志:记录运行时间超过阈值的SQL。
    • 二进制日志:记录数据变更操作。
    • 中继日志:用于主从复制记录。
    • 事务日志:记录事务操作,用于恢复。

    范式解释

  • 一范式(1NF):字段不混合多个属性,存储单一属性。
  • 二范式(2NF):非关键字段不能部分依赖于候选键。
  • 三范式(3NF):非关键字段不能传递依赖于候选键。
  • 存储过程与函数

    存储过程是一组预编译的SQL语句,用于执行复杂操作,提高性能和安全性。

    SQL优化建议

  • 索引优化:确保查询字段有合适索引。
  • 查询优化:减少全表扫描,优化WHERE条件。
  • 分页优化:使用合理的分页方式,避免极端情况。
  • 查询缓存:使用query cache,减少数据库压力。
  • 读写分离:优化I/O操作,减少磁盘压力。
  • 通过以上优化措施,可以显著提升数据库性能和稳定性。

    转载地址:http://tmfzz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现删除重复的字母字符算法(附完整源码)
    查看>>
    Objective-C实现判断32位的数字是否为正数isPositive算法(附完整源码)
    查看>>
    Objective-C实现十进制转N进制算法(附完整源码)
    查看>>
    Objective-C实现十进制转八进制算法(附完整源码)
    查看>>
    Objective-C实现华氏温度转摄氏温度(附完整源码)
    查看>>
    Objective-C实现单例模式(附完整源码)
    查看>>
    Objective-C实现单向链表的反转(附完整源码)
    查看>>
    Objective-C实现单向链表的反转(附完整源码)
    查看>>
    Objective-C实现单字母密码算法(附完整源码)
    查看>>
    Objective-C实现单循环链表算法(附完整源码)
    查看>>
    Objective-C实现单词计数(附完整源码)
    查看>>
    Objective-C实现单链表反转(附完整源码)
    查看>>
    Objective-C实现博福特密码算法(附完整源码)
    查看>>
    Objective-C实现卡尔曼滤波(附完整源码)
    查看>>
    Objective-C实现卡尔曼滤波(附完整源码)
    查看>>
    Objective-C实现压缩文件夹(附完整源码)
    查看>>
    Objective-C实现原型模式(附完整源码)
    查看>>
    Objective-C实现双向A*算法(附完整源码)
    查看>>
    Objective-C实现双向广度优先搜索算法(附完整源码)
    查看>>
    Objective-C实现双向循环链表(附完整源码)
    查看>>