mysql 面试整理

  • MySQL 事务特点,事务类型?

事务的特点:

  1. 原子性:要么执行成功要么执行失败。实现主要是以undo log
  2. 隔离性:保证一个事务的执行不会影响到其他事务,事务之间是隔离的。
  3. 持久性:事务的持久性是指当事务提交之后,数据库的改变就应该是永久性的,而不是暂时的,实现主要是基于:redo log
  4. 一致性:事务结束后,整个数据库的状态没有被破坏。

事务的隔离级别:

  1. 读未提交:
  2. 读以提交
  3. 可重复读
  4. 串行化
  • MySQL 主从复制原理,如何解决主从延迟问题?

mysql 的master 在进行数据写入过程中,会将数据写入到 binlong 日志文件中,salve 会连接到 master ,通过master 的binlog dump 线程获取到 binlog 的日志信息写入到 salve 的中继日志中,然后另外的一个sql 线程将中继日志中的数据写入到 salve 中,保证了 MySql 的主从同步。

  1. 尝试针对MySQL 的参数进行设置:比如调整 innodb_buffer_pool_size 的大小
  2. 使用更好的物理机器、使用SSD、内网等
  3. 使用并行同步复制版本(即高版本的支持)
  4. 业务上做好保证,即 写入之后立即读的这种场景尽量在主库。
  • MySQL 索引有哪几种,可以为 null 吗?为 null 索引是否生效?举例哪些条件下索引失效?

mysql 的索引有:

  1. 索引的类型:
    a. 单列索引
    b.联合索引
  2. 索引的分类:聚簇索引 与 非聚簇索引 分别对应的是:MySQL 的 innodb 引擎 与 myisam 引擎。
  3. 索引的数据结构有:b+ tree / hash
  4. 索引失效:
    a. 如果条件中有or,即使其中有条件带索引也不会使用
    b. 对于多列索引,不是使用的第一部分,则不会使用索引
    c. like查询以%开头
    d. 显示或隐士的类型转换,如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
    e. 使用非等值查询、使用函数
    f. 组合索引遵循最左匹配原则
  • MySQL 为什么使用 B+tree,不用 B-tree?Hash 在哪些场景下使用?

首先 B tree 的特点
a. 所有关键字和数据分布在整个树中。
b. 任何关键字出现且只出现在一个节点中。
c. 因为数据在节点上,所以搜索有可能在非叶子节点结束。
d. 在关键字全集内做一次查找,性能逼近二分查找算法。
B + tree 的特点
a. 非叶子节点只存储关键字(即索引字段),数据存储在 叶子节点
b. 叶子节点之间有 指针 指向,更适合范围查询。
基于以上的 两种数据结构的特点不同,可知,b+tree 的叶子节点不存储数据,相同页上存储的节点会更多,减少了 i/o 次数,而且 b+tree 的叶子节点的指针更适合范围查找、排序等。
Hash 的数据结构决定了 在进行等值查询时,因为其时间复杂度 o(1)的特性,更适合等值查询,但是进行排序范围查找时效率会很低。而tree 天然具有顺序性。

  • 覆盖索引有了解过嘛 ?怎么实现的 ?是否需要回表?

其实覆盖索引就是 查询的字段的结果值均在索引中。比如:select name,id from test where id = 1 and name = "张三"
通过一次索引查询就可以查询出对应的值。不需要回表,因为查询的字段在 索引数的关键字。

你可能感兴趣的:(mysql 面试整理)