1、MYSQL中redolog、binlog 、undolog的区别与作用。
redolog:即重做日志,用来实现事物的一个持久性,由radiobuff和radiolog两部分组成。其中 radiobuff是一个缓冲,存放在内存里面;radiolog是文件,存放在磁盘里。这两个组成redolog以确保事物的持久性。
binlog:即归档日志,记录了ddl和dml语句,以事件的形式进行记录,主要用于数据复制操作。
undolog:即回滚日志,以记录数据被修改之前的信息,记录数据的一些逻辑变化,主要用于回滚之前的一些操作。
2、MYSQL中表锁、页面锁与行锁的作用及优缺点。
作用:表锁——1、用于更新表中大量数据。
2、事物涉及到很多张表,业务逻辑复杂,加表锁可以避免死锁情况。
行锁——用于并发处理的情况。
页面锁——介于表锁和行锁中间。
优点:表锁——开销小,加速比较快,不会出现死锁的情况。
行锁——锁定力度较小,发生锁冲突的概率就会低很多,并发能力较好。
页面锁——开销比行锁小,锁定力度比表锁小一点,并发能力和死锁情况介于表锁和行锁之间。
缺点:表锁——因为锁定力度比较大(整张表都锁定),发生锁冲突的概率较高,因此并发度最低。
行锁——开销比较大,加速慢,会出现死锁情况。
页面锁——会出现死锁。
3、MYSQL设计模式的原则。
开放封闭原则:通过扩展软件实体来解决一个需求的变化,而不是通过修改代码来完成变化。
里氏代换原则:可以在任何地方使用继承的子类(子类可以去扩展父类的功能,但不能改变父类原有的功能;子类可以去实现父类的抽象功能,但不能覆盖父类的非抽象功能)。
依赖倒转原则:面向接口编程应该依赖于抽象,而不是依赖于具体,耦合度高。
接口隔离原则:使用多个隔离的接口比使用单个接口好
迪米特法则:最少指导原则,一个类要尽可能减少对其他类之间的依赖(低耦合高内聚)。
单一职责原则:一个方法只负责一个事情
4、object类的常用方法。
clone():object——一个拷贝方法,实现了对对象的浅拷贝。
ps:只有实现了克隆接口,才能调用该方法;
finalize():void——判断对象是不是重写了该方法,以判断对象是否可回收。
equals(object):boolean——在object中子类需要重写该方法。
hashCode():int——主要用于hash查找,重写equals方法时一般需要重写该方法,用于一些具有hash功能的集合中,如hashmap、hashtable等。
wait(long,int):void——配合SQL使用,用于等待该对象的锁,此时处于睡眠状态。
notify():void——唤醒对象在等待队列中的某个线程。
notifyALL():void——唤醒在该对象上等待队列的所有线程。
5、MYSQL中SQL语句的执行过程。
步骤1:查询缓存,如果有缓存就返回结果,否则就进入到解析器。
步骤2:解析器解析完之后就进入到预处理器来对解析树进行预处理。
步骤3:进入到查询优化器,把处理的解析树转化为执行计划。
步骤4:查询执行引擎,通过接口调用存储引擎(MYISAM、InnoDB)的结果,将其返回,如果是可缓存的就会进行缓存。
ps:在MYSQL8的版本中就不能进行查询缓存。
6、MYSQL存储引擎中MYISAM和InnoDB的区别。
分别从存储结构、存储空间、可移植性、备份及恢复、文件格式、记录存储顺序、外键、事务、锁支持等方面进行说明(灰色字体为MYISAN,红色字体为InnoDB)。
1、每张表存放在3个文件(frm表格定义文件、MYD数据文件、MYI索引文件)。
所有的表都保存在同一个数据文件中,InnoDB大小只与操作系统文件大小有关,
一般为2GB.
2、MYISAM的存储空间可被压缩,存储空间较小。
InnoDB需要更多的内存和存储,会在主内存中建立专用的缓冲池用于高速缓冲数据和 索引。
3、MYISAM的数据以文件形式存储,跨平台数据转移更方便,在备份和恢复时可单独针对
某个表进行操作。
需要拷贝数据文件、备份binlog或者用mysqldump。
4、数据(MYD)和索引(MYI)是分别存储的。
数据和索引是集中存储的,.ldb。
5、按记录插入顺序保存。
按主键大小有序插入。
6、不支持外键和事务。
支持外键和事务
7、只支持表锁。
三种锁定方式都支持。
8、SELECT操作中MYISAM存储引擎更优。
INSERT、UPDATE、 DELETE操作InnoDB更优。
9、select count(*)操作中MYISAM存储引擎更快,因为其内部维护了一个计数器,
可以直接调取。
10、MYISAM是堆表,通过B+树索引。
InnoDB是索引组织表,通过B+树索引。
11、不支持hash索引,但支持全文索引。
支持hash索引,但不支持全文索引。
7、创建索引的原则。
1、最左匹配原则
2、较频繁作为查询条件的字段才去创建索引
3、更新频繁字段不适合创建索引
4、区分度太低的不适合创建索引
5、尽量去扩展索引,不要新建索引。