mysql面试题

  1. 数据库的三大范式

    第一范式:每个都不可以再拆分。

    第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。(表的行数据要依赖于主键)

    第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。(行数据之间不存在a->b->c的依赖关系)

  2. 数据库事务的四大特性(ACID)
    a.原子性:原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚
    b.一致性:是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
    c.隔离性:当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。   
         1)未提交读:最低级别,任何情况都无法保证。   
         2)已提交读:可避免脏读的发生。
         3)可重复读:可避免脏读、不可重复读的发生。
         4)串行化:可避免脏读、不可重复读、幻读的发生。
    d.持久性:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

  3. 数据存储结构
    mysql采用的是B+Tree的数据结构,那么跟B-Tree有什么区别吗?为什么要采用B+Tree的数据结构?
    a.区别
    1)B-Tree是非叶子节点和叶子节点都能存放键值和数据的,但是B+Tree是只有叶子节点才存放数据,非叶子节点只存放键值;
    2)B-Tree的叶子节点在同一层,并且升序排列;B+Tree叶子节点是一个双向环形链表
    b.为什么采用B+Tree?
    因为B-Tree有个最大的问题是不能很好的范围查询,而B+Tree叶子节点上有下一个记录的指针,所以范围查询是非常方便的;另外相比于红黑树(一种二叉平衡树,一个节点,只有一个数据和两个子节点的地址;根节点、叶子节点必须是黑色;红色节点必须有两个黑色的叶子节点;所有路径上都有相同数目的黑色节点)而言,树高增长慢,不浪费每次读取。

  4. 索引类型
    a)按索引的存储方式划分

    FULLTEXT--MYISAM
    HASH
    BTREE-将索引值按一定的算法,存入一个树形的数据结构中
    RTREE-MySQL很少使用
    b)按索引类型划分
    唯一索引
    主键索引
    全文索引
    组合索引

  5. 聚簇索引和非聚簇索引
    聚簇索引是innodb里的主键索引,将索引的键值和数据都存放在叶子节点上,一个表只能有一个聚簇索引。
    非聚簇索引对于innodb而言是只存放该索引的键值和主键;对于myisam而言,叶子节点存放数据为索引键值和对应数据的指针

  6. mysql的优化
    https://www.cnblogs.com/sharpest/p/10390035.html

  7. mysql的执行计划怎么看?应该关注哪些数据?
    语法:explain+sql语句





     a. id:表示查询子句的查询顺序,值越大优先级越高,id相同为同一组。
     b. select_type: SIMPLE(查询中不包含子查询);
                        若包含子查询,外部的查询标记为PRIMARY
                        SUBQUERY(SELECT或者where条件包含子查询);
                        DERIVED(FROM中有子查询)
                        UNION(查询中有UNION),如果FROM中有UNION的子查询,则外层的被标注为DERIVED,从union获取结果被标记为UNION RESULT
    c.table:操作的表名
    d.type:ALL(全表扫描)
                  index(遍历索引树)
                  range(索引范围查找)
                  ref(非唯一索引扫描)
                  eq_ref(唯一索引扫描)
                  const(where查询值转换为常量)
                  system(当表中只有一行数据的const查询)
                  NULL(不用访问表和索引)
    e.possible_keys:可能用到的索引
    f: key:实际使用的索引
    g:key_len: 索引长度
    h:ref:表的连接条件
    i:rows:查询行数
    j:Extra:其他信息
        Using index:select中使用了索引
        Using where:查出记录后存储引擎再过滤
        Using temporary: 为了排序和分组,采用临时表存储结果
        Using filesort:无法使用索引

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值