mysql简单面试问题

166 阅读2分钟

一、mysql5.8增加新特性:

1、隐藏索引

//隐藏索引invisible
ALTER TABLE t ALTER INDEX i INVISIBLE;
//显示索引visible
ALTER TABLE t ALTER INDEX i VISIBLE;

比如将索引先隐藏起来的,看看数据库查询性能有没有变化, 然后可以恢复。 2、设置持久化 新增命令:

set persist max_connections = 500;

会将配置写在mysqld-auto.cnf文件中。 3、UTF-8编码 从mysql 8开始, 缺省编码改为utf8mb4, 这个编码包括emoji字符, 以前项目得转义, 现在不用转义就可以。 4、窗口函数 窗口函数有点像是 SUM()、COUNT() 那样的集合函数,

mysql> select * from classes;
+--------+-----------+
| name   | stu_count |
+--------+-----------+
| class1 |        41 |
| class2 |        43 |
| class3 |        57 |
| class4 |        57 |
| class5 |        37 |
+--------+-----------+
5 rows in set (0.00 sec)

//比如我们要对班级人数从小到大排名,利用窗口函数
select *, rank() over w as 'rank' from classes window w as (order by stu_count);

二、mysql中删除命令

delete 只能一条一条的删除, 而非常关键的一个关键字是:truncate, 是将整个表删除, 保留表结构,比delete快。 一般会问truncate这个关键字。

三、mysql的InnoDB和MyISAM存储引擎都是用的B+Tree树

面试时候只要说出B+Tree树, 为什么要用B+Tree? 因为B树中每个节点的关键字都有data域,B+树除了叶子节点,其他节点只有索引,也就是说同样的磁盘页B+树可以容纳更多的元素。 B+树的范围查询更加方便,可以先找到范围下限,然后通过叶子结点的链表顺序遍历,直至找到上限即可。而B树只能先找到下限,通过中序遍历查找,直到找到上限。

四、为什么不用AVL或红黑树?

我们假设B+树一个节点可以有100个关键字,那么3层的B树可以容纳大概1000000多个关键字(100+101100+101101*100)。而红黑树要存储这么多至少要20层。所以使用B树相对于红黑树和AVL可以减少IO操作