目录
- 1.请你谈谈 MySQL 事务隔离级别,MySQL 的默认隔离级别是什么?
- 2、可重复读解决了哪些问题?
- 3、对 SQL 慢查询会考虑哪些优化 ?
- 4、MySQL 为什么 InnoDB 是默认引擎?
- 5、MySQL 索引底层结构为什么使用 B+树?
- 6、B+ 树的叶子节点链表是单向还是双向?
- 7、如何查询慢 SQL 产生的原因
- 8、索引失效的情况有哪些?
- 9、MySQL 事务的特性有什么,说一下分别是什么意思?
- 10、介绍下 MySQL 聚簇索引与非聚簇索引的区别(InnoDB 与 Myisam 引 擎)?
- 11、创建一个联合索引(a,b)和一个语句 select * from table where b = 'xxx', 判断是否能命中索引?为什么?
- 12、MySQL 索引分类?
- 13、谈谈你对SQL注入式攻击的理解?
- 14、简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)?
- 15、幻读是什么,用什么隔离级别可以防止幻读?
- 16、limit 1000000 加载很慢的话,你是怎么解决的呢?
- 17、什么是散列表?select * 和 select 1?
- 18、介绍下 MySQL 的主从复制原理?产生主从延迟的原因?
- 19、MySQL 中有哪几种锁?
- 20.数据库三范式
- 21.mysql中int(10)和char(10)以及varchar(10)的区别
- 22.谈谈sql优化的经验
- 23.最左前缀原则与最左匹配原则
- 24.百万级别或以上的数据如何删除
- 25.CHAR与VARCHAR的区别
- 26.MySql里记录货币用什么字段类型好
- 27.Mysql有关权限的表有哪几个
- 28.什么是索引
- 29.索引的优缺点
- 30.数据库死锁
- 31.索引下推
- 32.mysql服务器端逻辑架构
- 33.为什么select * 比select字段效率低?
- 水平路由分表有哪几种方式
- 分库分表后如何实现不停机扩容
1.请你谈谈 MySQL 事务隔离级别,MySQL 的默认隔离级别是什么?
为了达到事务的四大特性,数据库定义了 4 种不同的事务隔离级别:
- READ-UNCOMMITTED(读取未提交):最低的隔离级别,允许脏读,也就是可能读取 到其他会话中未提交事务修改的数据,可能会导致脏读、幻读或不可重复读。
- READ-COMMITTED(读取已提交): 只能读取到已经提交的数据。Oracle 等多数数 据库默认都是该级别 (不重复读),可以阻止脏读,但是幻读或不可重复读仍有可能发 生。
- REPEATABLE-READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据 是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
- SERIALIZABLE(可串行化):最高的隔离级别,完全服从 ACID 的隔离级别。所有的 事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏 读、不可重复读以及幻读。
- MySQL 默认采用的 REPEATABLE_READ 隔离级别。
2、可重复读解决了哪些问题?
- 可重复读的核心就是一致性读(consistent read);保证多次读取同一个数据时,其值都和事 务开始时候的内容是一致,禁止读取到别的事务未提交的数据,会造成幻读。
- 而事务更新数据的时候,只能用当前读。如果当前的记录的行锁被其他事务占用的话,就 需要进入锁等待。
- 查询只承认在事务启动前就已经提交完成的数据。
- 可重复读解决的是重复读的问题,可重复读在快照读的情况下是不会有幻读,但当前读的 时候会有幻读。
3、对 SQL 慢查询会考虑哪些优化 ?
分析语句,是否加载了不必要的字段/数据。
分析 SQL 执行计划(expl索引信息)。
如果 SQL 很复杂,优化 SQL 结构。
按照可能的优化点执行表结构变更、增加索引、SQL 改写等操作。
查看优化后的执行时间和执行计划。
如果表数据量太大,考虑分表。
利用缓存,减少查询次数
4、MySQL 为什么 InnoDB 是默认引擎?
聚簇索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一 个聚簇索引,因为一个表的物理顺序只有一种情况,所以,对应的聚簇索引只能有一个。聚簇 索引的叶子节点就是数据节点,既存储索引值,又在叶子节点存储行数据。 Innodb 创建表后生成的文件有: frm:创建表的语句 idb:表里面的数据+索引文件
5、MySQL 索引底层结构为什么使用 B+树?
- B+树的所有叶节点可以通过指针相互连接,能够减 少顺序遍历时产生的额外随机 I/O;
- B 树一个节点里存的是数据,而 B+树存储的是索引(地址),所以 B 树里一个节 点存不了很多个数据,但是 B+树一个节点能存很多索引,B+树叶子节点存所有的数据。
- B+树叶子节点是一个双向链表的数据结构,便于范围查找。
6、B+ 树的叶子节点链表是单向还是双向?
双向链表
7、如何查询慢 SQL 产生的原因
分析 SQL 执行计划(explain extended),思考可能的优化点,是否命中索引等。
没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)。
内存不足。
网络速度慢。
是否查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)。
是否返回了不必要的行和列。
锁或者死锁。
I/O 吞吐量小,形成了瓶颈效应。
sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
8、索引失效的情况有哪些?
like 以%开头索引无效,当 like 以&结尾,索引有效。
or 语句前后没有同时使用索引,当且仅当 or 语句查询条件的前后列均为索引时,索引生效。
组合索引,使用的不是第一列索引时候,索引失效,即最左匹配规则。
数据类型出现隐式转换,如 varchar 不加单引号的时候可能会自动转换为 int 类型,这 个时候索引失效。
在索引列上使用 IS NULL 或者 IS NOT NULL 时候,索引失效,因为索引是不索引空值的。
在索引字段上使用,NOT、 <>、!= 、时候是不会使用索引的,对于这样的处理只会进行全表扫描。
对索引字段进行计算操作,函数操作时不会使用索引。
当全表扫描速度比索引速度快的时候不会使用索引。
9、MySQL 事务的特性有什么,说一下分别是什么意思?
原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。
一致性或可串性:事务的执行使得数据库从一种正确状态转换成另一种正确状态。
隔离性:在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务。
持久性:事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障&