前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL面试题

MySQL面试题

作者头像
石的三次方
发布2021-01-05 22:33:06
7220
发布2021-01-05 22:33:06
举报
文章被收录于专栏:石的三次方石的三次方

MySQL数据库面试系列

1. 事务的四大特性

  • 原子性。事务中的操作要么都执行,要么都不执行
  • 一致性。事务操作前的状态和事务操作后的状态相同
    • 进行财务转账的时候,A余额不足不能进行转账,如果进行了转账此时状态就不是正确的,于是进行回滚,此时保证了事务状态的一致性。
    • 事务前后,数据总额一致
  • 隔离性。多个事务之间彼此是不可见的。
  • 持久化。当事务提交以后,对于数据的更改不会受到数据库系统本身的影响

2. 数据库隔离级别

「数据库并发可能出现的问题:」

  • 脏读。事务A读到了事务B修改的数据
  • 不可重复读。事务A读到了事务B修改并且已经提交的数据
  • 幻读。事务A读到了事务B新增的数据

「数据库定义的隔离级别:」

  • repeatable read「可重复读(MySQL默认)」
  • read commited读取提交
  • read uncommited读取不提交
  • serializable串行化

脏读

不可重复读

幻读

read uncommited

read commited

repeatable read

serializable

3. MySQL的两种存储引擎区别,各自适用于什么场景?

MYISAM

INNODB

事务

不支持

支持

表锁

行锁

索引

索引存储地址

索引存储数据和地址

全表总行数

不需要全表扫描

全表扫描

外键

不支持

支持

  • MyISAM中存在一个变量存储了表的记录总数

4. 谈一下索引的优势和劣势和什么时候使用索引,什么时候不使用

「优势:」

  • 提高了数据的检索速度,降低IO成本
  • 通过索引列进行排序,降低了CPU功耗

「劣势:」

  • 占用空间
  • 键值更新的时候,索引也需要更新

「使用:」

  • 查询操作多

「不使用:」

  • 写操作频繁

5. 索引的分类

  • 聚簇索引。是在数据的物理存储顺序和索引顺序相同。一张表中仅仅只能有一个聚簇索引。Innodb支持,MyISAM不支持。Innodb默认会使用主键作为聚簇索引,如果不存在主键,则会将一个非空的字段作为聚簇索引,如果没有非空的字段则引擎会隐式构建一个主键。这也是为什么使用自增的字段作为主键的原因。可以获得更好的写速率。
  • 非聚簇索引。又被称为辅助索引。包括唯一索引,前缀索引,复合索引等。
    • 构建一个场景:创建了一个name字段的索引,现在需要查询name='lisi'的行记录,这个时候先在辅助索引中进行查询所对应的叶子节点。而这个叶子节点中保存了name和该行的指针,而这个指针就是聚簇索引进行排序的字段值。
    • 那么是不是所有的字段查询的时候都需要通过聚簇索引进行查询呢?如果查询字段为覆盖索引,则不会使用聚簇索引,而是直接在辅助索引中取值。

6. Hash索引和BTree索引的区别

Hash索引一般用来做数据变化不大的等值查询。不能排序,而且不支持范围查询。

BTree索引,主流有两种,一种是B树,每一个叶子节点和中间节点中都存在有数据和指针;另一个是B+树,所有的数据都存储在叶子节点,中间节点也是一个索引。

7. 索引的底层实现为什么使用B+树而不是红黑树

这个和文件系统的磁盘读取有关系,磁盘读取的最小单位是簇,每一次读取都会将这一簇上的内容全部读取,而红黑树的两个节点并不能将簇填满,所以导致了空间浪费

B+树,多路寻找树,他可以存在很多分支,可以填满这些空间,所存储的内容更多,读取效率更快

8. SQL解析过程

from-->on-->join-->where--->group by---> having--->select-->order by-->limit

9. 谈一下MySQL架构

MySQL主要分为四层:

  • 连接层。主要是负责和各种后端语言进行交互
  • 服务层。进行SQL数据返回,解析,优化,缓存等
  • 引擎层。进行具体的数据操作
  • 存储层。主要进行数据库文件的存储

10. 谈一下索引的最左前缀原则

如果对三个字段建立联合索引,如果第二个字段没有使用索引,则第三个字段索引失效

11. 谈一下索引失效的情况

  • or,is null,is not null
  • like%开头的模糊查询
  • 索引字段数据类型转换
  • 范围查询
  • 对索引字段进行函数操作

12. 谈一下MySQL的锁

  • 行锁和表锁
  • 读锁和写锁
  • 间隙锁
  • 乐观锁和悲观锁

13. 谈一下查询SQL优化的方法

  • explain
  • 慢查询日志
  • show profile
  • 全局查询日志

14. explain常用的字段

  • id表的执行顺序;相同ID按顺序执行,不同ID的ID值越大越先执行
  • possible_keys;理论上使用到的索引
  • keys;实际使用的索引
  • type;查询数据使用的查询方法
  • extra;
    • using filesort文件内排序,没有使用索引排序
    • using index使用了覆盖索引
    • using where索引使用在了条件上
    • using index condition先过滤索引,然后再过滤where

15. 慢查询日志

可以设置一个SQL查询最长的等待时间,如果超过这个时间将会被记录到日志中

16. profile

可以全方位的看到每一条SQL的执行情况

17. 数据库三大范式

  • 数据库每一列不可再分
  • 数据库每一列均与主键相关
  • 与主键直接相关
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 石的三次方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL数据库面试系列
    • 1. 事务的四大特性
      • 2. 数据库隔离级别
        • 3. MySQL的两种存储引擎区别,各自适用于什么场景?
          • 4. 谈一下索引的优势和劣势和什么时候使用索引,什么时候不使用
            • 5. 索引的分类
              • 6. Hash索引和BTree索引的区别
                • 7. 索引的底层实现为什么使用B+树而不是红黑树
                  • 8. SQL解析过程
                    • 9. 谈一下MySQL架构
                      • 10. 谈一下索引的最左前缀原则
                        • 11. 谈一下索引失效的情况
                          • 12. 谈一下MySQL的锁
                            • 13. 谈一下查询SQL优化的方法
                              • 14. explain常用的字段
                                • 15. 慢查询日志
                                  • 16. profile
                                    • 17. 数据库三大范式
                                    相关产品与服务
                                    云数据库 SQL Server
                                    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档