一、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操作