面试复习

MySQL面试常问问题

2020-05-20  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读