一、InnoDB和MyISAM有什么区别?
InnoDB和MyISAM是MySQL中比较常用的两个执行引擎,MySQL在5.5之前版本默认存储引擎是MyISAM,5.5之后版本默认是InnoDB,MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用。
它们主要有以下区别:
1、InnoDB支持事务,MyISAM不支持。
2、InnoDB是聚集索引,MyISAM是非聚集索引。MyISAM是采用了一种索引和数据分离的存储方式,InnoDB的聚簇索引中索引和数据在一起。
3、InnoDB支持外键,MyISAM不支持。
4、InnDB最小的锁粒度是行锁,MyISAM是表锁。
5、InnoDB不支持FULLTEXT类型的索引(5.6之前不支持全文索引)。
二、char和varchar的区别?
char和varchar都用于在数据库中存储字符串的数据类型。它们之间的主要区别在于存储空间的使用方式:
char是一种定长的数据类型,它的长度固定且存储时会字段在结尾添加空格来将字符串填满指定的长度。char的长度范围是0~255。
varchar是一种可变长度的数据类型,它只会存储实际的字符串内容,不会填充空格。因此,在存储短字符串时,varchar可以节省空间。varchar的长度范围是0~65535。
优缺点及适应场景
对于字段值经常改变的数据类型来说,char比varchar也更有优势,因为char的长度固定,不会产生碎片。
varchar的优点是变长的字符串类型,兼容性更好;但是同时也会带来一些问题,如使用varchar可能会产生内存碎片、varchar会额外需要1到2个字节存储长度信息、以及update语句可能会导致页分裂。
适用:存储产品描述(可变长度)、存储用户地址、存储用户名称。
char的优点是定长的字符串类型,减少内存碎片,并且无需额外的磁盘空间去存储长度信息。但是它的缺点是会删除列末尾的空格信息。
适用:身份证号,订单号,国家编码等。
三、为什么大厂不建议使用多表join?
之所以不建议使用join查询,最主要的原因就是join的效率比较低。
MySQL是使用了嵌套循环的方式来实现关联查询的,就是要通过两层循环,用一张表做外循环,第二张表做内循环,外循环每一条记录跟内循环中的记录做比较,符合条件就输出。如果有两藏表的话,复杂度最高是 O(n^2),三张表则是 O(n^3) ,随着表越来越多,表中的数据量越多,join的效率就会呈指数级下降。
join
在MySQL中,可以使用join在两个或者多个表中进行联合查询,join有三种,分别是inner join、left join、right join。
inner join(内连接):获取两个表中字段匹配关系。
取两个表的交集部分
left join(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
取两个表的交集 + 左表中的数据
right join(右连接):与left join相反,获取右表所有记录,即使左表没有对应匹配的记录。
取两个表的交集 + 右表中的数据
四、说一说MySQL一条SQL语句的执行过程?
如:select * from users where age = '18' and name = 'jiege' ;
执行过程如下图:
① 使用连接器,通过客户端 / 服务器通信协议与MySQL建立连接。并查询是否有权限。
② MySQL 8.0之前检查是否有缓存,开启了 Query Cache 且命中完全相同的SQL语句,则将查询结果直接返回给客户端。
③ 由解析器进行语法分析和语义分析,并生成解析树。如查询是 select,表明是 users、条件是 age = '18' and name = 'jiege' ,预处理器则会根据MySQL规则进一步检查解析树是否合法。比如检查要查询的数据表或数据列是否存在等。
④ 由优化器生成执行计划。根据索引看看是否可以优化。
⑤ 执行器来执行SQL语句,这里具体的执行会操作MySQL的存储引擎来执行SQL语句,根据存储引擎类型,得到查询结果。若开启了Query Cache ,则缓存,否则直接返回。
五、什么是数据库事务?
数据库事务是访问并可能操作各种数据项的一个数据库操作操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束直接执行的全部数据库操作组成。
事务应该具有4个属性:原子性,一致性,隔离性,持久性。称为 ACID。
① 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
② 一致性:事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
③ 隔离性:多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
④ 持久性:一个事务一旦提交,它对数据库的修改一个永久保存在数据库中。
标签:面试题,join,varchar,存储,---,InnoDB,MyISAM,MySQL,Java From: https://www.cnblogs.com/hwjres/p/18050912