Mysql的基础问题原理

存储引擎:

存储引擎是Inndb。它支持行级锁,以及表级锁,

支持事务操作,

需要主键,若未声明主键,则会寻找表中的 not null 以及 unique 修饰的字段。若表中无此类字段,会隐式生成字段。

索引:

索引是为了优化查询的速率而创建的数据结构。

他的底层是B+树,(B+树的特点:b+树相对于平衡二叉树,他的阶数更多。所以他的查询效率比两个叶子节点的查询效率更快,相对于b树来说,B+树将所有的字段数据存放在叶子节点并且使用双向链表连接。这样更便于范围查询以及扫库)。当然索引也存在弊端。索引在每次数据库发生变化时需要维护。所以索引适合多查询,少修改的情况。

索引创建的规则:

当表数据量大的情况下适合创建。

字段差异大的情况下。

经常被group by,order by的数据。

聚簇索引和非聚簇索引:

聚簇索引将主键作为索引来排序的,将全部的字段信息存放在叶子节点中。

非聚簇索引就是,程序员选取某个字段作为索引来排序的,关联主键数据。

联合索引:根据顺序选取多个字段,作为索引排序的,在关联主键的数据。

回表查询:使用非聚簇索引查询后,未得到需要的全部信息,在根据主键去查询所需要的数据。

索引失效原因:

违反最左前缀法则:使用联合索引时,未按顺序条件查询字段信息。导致索引失效。

模糊查询:左模糊或者全模糊。以上因为字段信息不确定,导致索引无法发挥作用。

用在条件中进行函数运算:

在双引号使用类型转换:因为索引也是根据字段排序来创建的。由于类型转换导致索引的比较逻辑转变。索引就会失效。

条件时不等于。

索引失效的底层就是,无法根据条件进行排序。

Mysql的执行计划:

使用关键字Expplain,可以查询mysql对于语句的优化建议,以及表的索引是否生效。

Mysql的事务:

ACID:

A:原子性 :事务完成或者失败只会导致数据只有两种情况,要么执行所有语句,要么不执行。

C:一致性:由一个合法状态转化为另一个合法状态

I:隔离性:一个事务的执行不会因为其他事务的执行而影响。由底层的MVCC确保

D:持久性:当事务提交后,数据会持久化到磁盘信息。

事务的隔离级别:读未提交,读已提交,可重复读,串行化

并发事务出现的问题:脏读,不可重复读,幻读

Mysql的日志:

undo log、redo log、bin log

redo log 记录的是表修改语句(同aof一般)

undo log:是在事务进行时,记录对应的操作信息

三范式:

字段是原子的,不可以拆分

表中必须有主键

字段和主键必须相关

你可能感兴趣的:(面试,职场和发展,mysql)