mysql
2020-03-12 12:07:38 159 举报
AI智能生成
mysql面试知识点,足以应对初级开发
作者其他创作
大纲/内容
存储引擎
MyISAM
b+tree非事务的存储引擎,支持表锁,适合频繁的查询应用,不会出现死锁,适合小数据小并发 非聚集索引
MyISAM的索引文件仅仅保存数据记录的地址
MyISAM索引文件和数据文件是分离的
INNODB
B+tree,支持事务,行锁,聚集索引
InnoDB的数据文件本身就是索引文件
树的叶节点data域保存了完整的数据记录,这个索引的key是数据表的主键
innodb的所有辅助索引都引用主键作为data域
事务
特性
原子性
即不可分割性,事务要么全部被执行,要么就全部不被执行
一致性
事务的执行使得数据库从一种正确状态转换成另一种正确状态
隔离性
在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务
持久性
事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存
隔离级别
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)
并发问题
脏读
事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
不可重复读
事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
幻读
系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
三大范式
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解
第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余
优缺点
优点:可以尽量得减少数据冗余,使得更新快,体积小
缺点:对于查询需要多个表进行关联,减少写得效率增加读得效率,更难进行索引优化
优化sql
选择正确的存储引擎
优化字段的数据类型
字段越小会越快当然也需要足够的扩展空间
加索引
避免select *
尽可能使用not null
固定长度的表会更快
缺点会浪费空间
查询优化
explain
未用索引可以force index 但是不一定会更快
避免select *
多用exeist
建立索引
最左原则
问题
mysql为什么用B+而不用hash存储索引
1.利用哈希需要把数据全部加载到内存中,如果数据量大,是一件很消耗内存的事,而B+树是由于按照节点分段加载可以减少内存消耗
2.和业务场景有关,对于唯一查找,hash确实很快,但是数据库中经常查询多条数据,这个时候由于B+的有序性,叶子节点与链表相连,查找效率会比hash快很多
覆盖索引与回表
回表查询
在innodb查询的时候,先定位主键值然后在定位行记录,就是所谓的回表查询
索引覆盖
explain的输出结果extra字段为Using index是能够触发索引覆盖
分库分表分区
主从分离
0 条评论
下一页