- 这一部分没事建议去牛客网上实操一下,edge收藏栏学习有地址
- 知道四类基本的sql语句。去牛客网操作一下
- 知道select语句的执行顺序
- 知道一些常见的表格数据约束(还有一些是sql语句的关键字约束)
- 知道外键的作用:限制删除,同步更新,
- 了解常见的函数:字符串函数(concat,lrd。rrd。),数值函数(rand,round),日期函数(curdate,curtime),流程函数(if,if null,case when then else,case xx when)
- 了解innodb相关:(如下
- 索引处于引擎层
- 不同的表可以用不同的引擎
- mysql默认innodb,知道还有mysiam这种数据库引擎
- 存储引擎决定了数据的存储,操作的方式
- innodb的三大特性:事务外键行级锁
- innodb的逻辑结构(表空间结构段区页行
- b树的阶数决定的是最多有几个分支
- b树超过阶数中间的向上分
- b+树的每一个节点是一页
- b+树的叶子节点是双向链表存放数据
- 知道一些索引分类:(以叶子节点为区别的聚集索引(是关键字里面的主键索引),二级索引)
- 主键索引就是聚集索引
- 二级索引不存放数据,仅存放id(where name 就比where id效率更低)
- hash索引结构不支持范围查询(因为是确切的值,要记住这个弊端)
- 知道联合索引最左前缀法则(左边存在即可,缺失失效
- 知道常见的性能分析指令:show global status。show profiles。慢日志log配置记录。explain解释指令**(重要)**,查看参数可以获知执行的方式例如是否有索引,性能等级type,排序信息extra(是否有额外的消耗,例如使用临时表)。
- 知道给指定字段创建索引的指令
- 常见7种优化:插入优化load,主键优化设置自增避免页分裂(为什么?)还要避免数值过大减少二级索引所占的内存,排序优化:建立适合的索引(什么排序操作对应建立什么样的索引),group by优化:grop by后面出现的分组依据要符合最左前缀法则,但是注意整体包括前面的where一起符合最左就行。limit优化:通过索引查询(不通过索引是逐行往下查),之后两表联合查询。count优化count(*)效率最高不取值,count主键和字段(还要判断是否有null关键字)是取值在累加。update优化是为where语句建立索引(update的where要选择带有索引的键否则会锁住整张表)。
- mysql锁相关:
- 了解mysql三大类锁:全局锁,表级锁,行级锁
- 了解三类锁的应用场景:全局锁是为了备份整个数据库,表级锁(表锁的共享和排他的特性,意向锁的作用:dml会自动加上一个行锁,这样加不了表锁,但是问题在于:需要逐行读到该行的时候才能发现这个行锁,于是我们在外面加个意向锁告诉外面的人有行锁,元数据锁:解决ddl(会自动加一个元数据排他锁)与dml(自动加一个元数据共享锁)的冲突问题),行级锁:有行锁分为共享与排他:在dml的时候加的是排他锁,而在dql的时候可以选择加s还是x。还有间隔锁,这是查一个不存在的id的时候会锁住两边的id的数据,临键锁:条件有大于等,会给这个范围上锁。
- 了解事务四大特性的原理
- 了解innodb的逻辑存储结构:表空间,段,区,页,行。
- 了解innodb的架构:内存与磁盘。其中内存主要了解缓冲池与改变缓冲区。缓冲池中事务只有提交,缓冲池才会将脏页与磁盘交换。改变缓冲池本着能不从磁盘读数据就不从磁盘读数据的原则,将对缓冲池不存在的数据的操作直接保存对应数据,然后提交事务时交换。
- 了解innodb的后台线程:包含一个主线程与10个io线程,主线程主要负责刷新脏页到磁盘。
- 了解事务的定义,知道事务的acid四大特性
- 知道事务在提交之前都是在对缓冲区数据进行操作
- 知道事务的四大特性是怎么被保证的:持久性–通过redo log保证 脏页刷新出问题则会将数据恢复再做一次。原子性–通过undo log保证 任何操作的事务都是整体,回滚会直接回滚到事务发生之前(是以事务为原子性而不是一条sql语句)。一致性–上述两个文件组合就保证了缓冲区与磁盘数据一定是一致的。
- 知道什么是当前读:一条select语句加锁(例如:lock in share mode)就是当前读,由于加锁,此时不会有任何其它人来修改数据,系统默认读取最新数据,就叫做当前读。
- 知道什么是快照读:使用普通select语句就是快照读,实际上快照读的结果由readview文件undo log版本链来决定,不同隔离模式会有不同的产生机制。默认情况下innnodb是RR隔离,该事务首次普通select才会产生readview文件。而RC隔离则是每次普通select都会产生readview文件。
- 知道readview文件有个匹配规则会去undo log版本链当中查数据。知道readview 的一些参数。比如m_ids
- 了解mvcc多版本并发控制究竟是如何实现的:实际上就是readview以及undo log版本链,隐藏字段配合完成多并发数据的隔离性。
- 所谓隔离模式,其实也就是由于readview不同导致读取数据不同,隔离的力度不同。