三范式,反三范式:范式就是规范,就是关系型数据库在设计时要遵循的三个规范。第一范式就是列的不可分割性,第二范式就是主键,第三范式就是外键。反三范式:有时候为了查询效率或者可以推到出的字段,可以设置重读的字段,比如订单(总价)和订单项(单价)。
存储引擎相关:
分类:MySQL常用的存储引擎有InnoDB(默认存储引擎)、MyISAM。
InnoDB的优势:支持事务、支持行级锁和表级锁、查询不加锁,完全不影响查询、支持崩溃后恢复。
count(*):在没有where条件的情况下,MyISAM会比InnoDB快,尤其是在表很大的时候。InnoDB会做全表扫描,但是MyISAM内部维持了一个计数器,预存了结果。对于InnoDB的优化,可以将主键采用尽量小的类型且数据具有连续性(比如自增整型的id)和建立一个小字段的二级索引。
索引相关:
什么是索引:可以理解为类型书籍的目录,提高查询效率。
索引的好处:提高数据的检索速度,减少IO的次数;降低数据排序的成本,减少cpu消耗。
索引的坏处:占用空间;降低表更新的速度。
索引的分类:
1、普通索引
2、唯一索引(主键索引为特殊的唯一索引,不允许有空值)
3、复合索引
4、外键索引(InnoDB特有)
5、全文索引。
索引创建的原则:
1、索引列的基数越大越好(索引列的基数:不同列的总数)。
2、字段为where子句后的列或者连接子句中的列而不是select关键字后的列。
3、对字符串进行索引,应该定制一个前缀长度。
索引原理:实质就是数据结构中的B+树。
隔离级别相关:
事务的特性是指:ACID:原子性、一致性、隔离性、持久性。
事务的并发问题:记住一句脏读针对update操作。
MySQL四种隔离级别:读未提交、读以提交、可重复读、串行化。
MySQL锁机制:MySQL有全局锁、表级锁、行锁三种。其中全局锁和表级锁是所有都有的。而行锁是靠引擎层自己实现的,所以不是所有的引擎都具有行锁。
两阶段协议:在InnoDB存储引擎中行锁是在需要的时候才加上,但并不是在不需要时就立刻释放,是要等到事务结束后才释放行锁。
MySQL主从复制原理:MySQL的主从复制实际上就是三个线程的交互,master上面的binlog dump负责将binlog event传到slave,slave上面的IO线程负责接收master传来的binlog同时将binlog写入自己的relay log,slave上面的SQL线程读取binlog并且执行。