美文网首页面试复习
MySQL面试常问问题

MySQL面试常问问题

作者: 云三木 | 来源:发表于2020-05-20 20:38 被阅读0次
    1.mysql事务特征

    答:原子性,一致性,隔离性,持久性。

    2.mysql索引是怎么实现的

    答:数据库索引通常使用B树或者B+树

    3.mysql的搜索引擎MyISAM 和 InnoDB 是MySQL区别?

    答:

    m:MyISAM    i:InnoDB

    1. 事务支持
           m: 不支持事务, 追求的性能, 速度
           i: 支持事务 功能强大
    2. 全文索引 FULLTEXT
           m: 支持
           i: 不支持 通过第三方技术shpinx 来完成全文索引
          注意: MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引;
           MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引;
           只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。
    3. CURD操作
           m: 执行大量的查询操作, 速度相对比较快
           i: 执行大量的增删改操作, 速度相对比较快
    4. 表总行数
           m: 存储总行数 , 通过count() 来统计总行数, 直接获取
           i: 没存总行数 , 通过count() 来统计总行数, 消耗巨大
      注意: 如果带条件的查询, 两者没区别, 消耗都巨大
    5. 行锁,表锁
           m: 支持表锁
           i: 支持表锁, 也支持行锁(默认)

    总结:
         对于多读少写, 重速度, 建议采用 MyISAM
         对于多写少读, 需要事务, 大数据, 建议采用 InnoDB

    4.mysql三范式

    答:1NF:无重复的列,每一列都是不可分割的基本数据项,同一 列中不能有多个值,即实体中的某个属性不能有多个值或者不 能有重复的属性。
    2NF:属性完全依赖于主键,第二范式必须先满足第一范式, 要求表中的每个行必须可以被唯一地区分。通常为表加上一个 列,以存储各个实例的唯一标识PK,非PK的字段需要与整个 PK有直接相关性
    3NF 属性不依赖于其他非主属性;

    5.mysql隔离级别

    答:mysql事务的并发问题一般有:脏读,不可重复读,幻读三种情况。mysql给出了四种数据隔离级别:读未提交,读已提交,不可重复读,串行化。一般使用第三级别(不可重复读)就可以解决脏读和不可重复读的问题,串行化三种问题都可以解决。

    6.mysql优化简单说下?

    答:首先去看需要优化的SQL,先分析SQL中有没有用到索引,如果用到了给常用的字段加上索引,如果加了索引还是很慢,就是使用show profile命令分析具体原因,看看加了索引是否用到了。

    一般使用SQL查询时需要注意什么:
    (1) 尽量不要使用select * ,换成加上索引的字段

    (2) 少用in ,如果in里面的数据比较多还是会回表的

    (3) 对查询的列不要使用函数或者运算。否则索引无法使用。

    一般加了索引但没有用到的情况:

    (1) 用OR分隔开的条件,如果OR前面的条件中的列有索引,而后面的列没有索引,那么涉及到的列索引不会被使用。

    (2) 不是用到复合索引中的第一列即最左边的列的话,索引就不起作用(最左原则)。

    (3) 如果like是以%开头的

    (4) 如果列类型是字符串,那么where条件中字符常量值不用’’引号引起来的话,那就不会失去索引效果,这是因为MySQL会把输入的常量值进行转换再使用索引。

    (5)order by 字段混合使用DESC ASC 不会使用索引;Where条件过滤的关键字和Order by中所使用的不同 不会使用索引.

    1、查看SQL的执行频率---------------使用show status命令

    2、定位哪些需要优化的SQL------------通过慢查询记录+show processlist命令查看当前线程

    3、分析为什么SQL执行效率低------------使用explain/desc命令分析

    相关列简单解释:type、table、select_type...
    4、对症下药采取优化措施-----------举例采取index进行优化

    7.主键和唯一索引的区别?

    答:

    主键和唯一索引都要求值唯一,但是它们还是有区别的:
    ①.主键是一种约束,唯一索引是一种索引;
    ②.一张表只能有一个主键,但可以创建多个唯一索引;
    ③.主键创建后一定包含一个唯一索引,唯一索引并一定是主键;
    ④.主键不能为null,唯一索引可以为null;
    ⑤.主键可以做为外键,唯一索引不行;
    ⑥.主键约束比唯一索引约束严格,当没有设定主键时,非空唯一索引自动称为主键。主键产生唯一的聚集索引,唯一索引产生唯一的非聚集索引
    注:聚集索引确定表中数据的物理顺序,所以是主键是唯一的(聚集就是整理数据的意思)

    从图中不难看出,主键索引和非主键索引的区别是:非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。

    根据这两种结构我们来进行下查询,看看他们在查询上有什么区别。

    1、如果查询语句是 select * from table where ID = 100,即主键查询的方式,则只需要搜索 ID 这棵 B+树。

    2、如果查询语句是 select * from table where k = 1,即非主键的查询方式,则先搜索k索引树,得到ID=100,再到ID索引树搜索一次,这个过程也被称为回表。

    8.为什么添加了索引,查询会更快?

    答:

    传统的查询方法,是按照表的顺序遍历的,不论查询几条数据,mysql需要将表的数据从头到尾遍历一遍
    在我们添加完索引之后,mysql一般通过BTREE算法生成一个索引文件,在查询数据库时,找到索引文件进行遍历(折半查找大幅查询效率),找到相应的键从而获取数据

    索引的代价:
    创建索引是会产生索引文件的,占用磁盘空间;索引文件是一个二叉树类型的文件,可想而知我们的dml操作同样也会对索引文件进行修改,所以性能会下降

    9.在哪些column上使用索引?

    答:

    1.较频繁的作为查询条件字段应该创建索引
    2.唯一性太差的字段不适合创建索引,尽管频繁作为查询条件,例如gender性别字段
    3.更新非常频繁的字段不适合作为索引
    4.不会出现在where子句中的字段不该创建索引

    mysql优化:https://www.jianshu.com/p/b43318a2b395

    相关文章

      网友评论

        本文标题:MySQL面试常问问题

        本文链接:https://www.haomeiwen.com/subject/vvwjohtx.html