mysql 8新特性

发布于:2024-07-17 ⋅ 阅读:(173) ⋅ 点赞:(0)

一、为什么要使用mysql 8?
1、5.7及以前的版本在2023年已经停止维护代码;
2、8  性能很好,全内存访问,200W的QPS  能跑到16万

二、有哪些新特性

1、账号安全:

  • 5.7及以前用户创建和授权可以一行sql解决,8不行,得分开执行sql语句;
  • 认证插件更行,密码的认证不一样,安全级别更高,caching_sha2_password;
  • 密码允许重复修改为一样的;

2、隐藏索引:

    查看表结构及详细信息:show  create  table  table_name\G;

  • 隐藏索引:

        (1)不会被优化器使用,不可见,
        (2)使用场景:
        a、软删除:当对索引进行创建和删除时,如果误删了再创建会影响性能,新版改为可以变成软删除,过段时间可以进行恢复

        b、灰度发布:线上测试,加隐藏,仅针对测试,如果发现索引没问题也是有必要的,可以变成正式索引;可以在session级别把隐藏索引打开,不影响正式的会话
        实战:create index  index_name  on  table_name(字段)  invisible;

  • 降序索引:

        a、以前版本在创建B+Tree的时候默认是升序的,8以后索引可以是降序的;
        b、实战:

  • 函数索引: 

        a、之前讲过,不要在索引列上加操作,否则会导致索引失效
        b、mysql8后,如果在索引列上加了函数,mysql会新增一个隐藏列来存储函数执行后的数据,并在该列上新建索引;
        c、查询时,直接查隐藏列,不会导致索引失效,该列仅对mysql可见,对用户不可见;
        d、在5.7中group by有默认排序(升序),mysql8在group by上面没有进行排序,必须group by  order by
        实战:

3、通用表 表达式:

(1)使用场景:公司部门组织结构、城市行政组织结构,表示上下级关系,使用递归的方式查询?
    5.7使用union  all,关联自身,层级是固定的,有几个层级就有几个union all
    mysql8后,使用with recursive  视图表名称(列)  as (
        select * from t1 
        union all
        select * from t1 
    )
    意思就是将as后面的查询结果当成视图里面的列进行传递,达到递归的效果;
(2)实战:

4、函数窗口:

(1)多用于统计分析
(2)分析函数:与分组、聚合函数非常类似
(3)类似于使用partition by 代替group by,因为group by使用的时候有很多限制,比如select的时候,只能select group by的字段,如果要select更多字段,得在group by后面加;
(4)普通函数:
        sum、avg、count、
(5)专用函数:
        rank()、row_number()

5、DDL实现原子操作:

(1)drop、create、alter等DDL语句同时操作多张表,如果有一个表报错了,5.7之前会执行成功的表,而8后则所有都不执行成功,保证原子性;
(2)实战:

6、JSON增强:

(1)增加了一个数据类型json:
(2)增加了json的一些转换函数:

7、InnoDB的其他特性:

详见文档:https://dev.mysql.com/doc/refman/8.0/en/windows-funcation-descriptions.html

关闭QC(Query Cache)缓存查询

死锁检查:1、关闭死锁检查,2、通过配置innodb_lock_wait_timeout,当遇到死锁时,在很短的时间点立即返回,不再等待,提升性能;

GIS支持

Hash Join

        


网站公告

今日签到

点亮在社区的每一天
去签到