总结了最近遇到的mysql面试题,总结的这部分主要是我以前不知道的或者忘记的
mysql的知识体系推荐看这篇文章: MySQL 数据库基础知识(系统化一篇入门)
更多mysql面试题推荐这篇文章:MySQL经典36问
mysql查询必会的50道题:mysql 经典50题
1.使用sql语句的between进行范围查询时,查询的区间是闭区间,即包括边界值,no between的查询结果不包括边界值。
2.mysql索引为啥用B+树?
- 一方面:B+树中各节点之间都是有序的,节点内部有多个key的时候,内部的key也是有序的,所以整棵B+树就是有序的,所以可以提高查询速度;另一方面:B+树中一个节点可以存储多个元素(即记录),从而可以使得整个B+树的高度不会太高,进而提高从查询速度
3.B树、B+树、B*树区别
- B树特点: 1.各节点之间是有序的 2.一个节点中可以存储多个元素,多个元素之间的也是有序的 即结点间有序,节点内部的多个元素之间也有序
- B+树特点: 除了叶子节点之间有指针,非叶子节点之间也有指针 1.拥有B树的特点 2.叶子节点之间是有指针的(方便做范围查询) 3.非叶子节点不存储数据,只存储key(key是有序的,方便索引),用来提高B+树所能存储的数据量;并且非叶子节点上的key都冗余在了叶子节点上,保障了叶子节点之间也是有序的,所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录;跟记录有关的数据只存储在叶子节点上;
- B*树特点: 除了叶子节点之间有指针,非叶子节点之间也有指针
具体mysql为啥用B+树建立检索推荐看这篇文章
4.给一张包含2kw条数据的表中添加一个新字段,会出现什么问题,怎么解决?
- 在执行添加新字段的sql语句时,会出现超时,可以先改一下mysql客户端工具的超时时间,设置超时时间为5s;发现还是不行,百度发现MySql5.X版本之前都有类似的问题,凡是大数据表 添加字段都会很慢,一旦执行添加字段操作 严重的会拖垮整个数据库服务器;而8.0.xx之后的版本引入了新的算法,基本上执行加字段操作很快,几乎是毫秒级的操作。升级数据库版本解决此问题可以一劳永逸,也可以用其他方法解决此问题,例如拓展一张新表等。
5.InnoDB和MyISAM区别
- 一个表允许有多个外键,且外键只适用于InnoDB表,MyISAM表不支持外键。InnoDB表和MyISAM区别表的主要区别是:InnoDB表支持事务、行锁和外键,MyISAM不支持;InnoDB表索引式修改效率较MyISAM高,MyISAM表查询、插入和删除效率较InnoDB高,而且MyISAM索引和数据分离,索引压缩存储,而InnoDB索引和数据紧密结合,不支持压缩,所以MyISAM内存利用率比InnoDB高;另外MyISAM的移植性也更强。
6.mysql存储引擎有哪些:常用的有InnoDB、MyISAM、CSV、MEMORY等共九种,具体的可以通过show engines命令来查询有哪些存储引擎,如下:
关于mysql事务推荐看这篇文章:深入了解InnoDB事务