• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql8.0来了

mysql8.0来了

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql8.0等相关知识,希望本文的分享对您有所帮助
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

MySQL开发团队于12日宣布MySQL 8.0.0开发里程碑版本(DMR)发布!可能有人会惊奇MySQL为何从5.x一下跳跃到了8.0。事实上,MySQL 5.x系列已经延续了很多年,从被Oracle收购之前就是5.1,而收购之后一直维持在5.x,比如5.5,5.6,5.7等等。其实,如果按照原本的发布节奏,可以把5.6.x当成6.x,5.7.x当成7.x。所以,只是换了版本命名方式而已。

20160916_233839_165.jpg

不过这次发布的MySQL 8.0.0开发版本还是有不少亮点的。

MySQL 8.0.0亮点

事务性数据字典,完全脱离了MyISAM存储引擎

真正将数据字典放到了InnoDB中的一些表中,从此不再需要FRM、TRG、PAR文件啦!Information Schema现在以数据字典表的一个视图出现。原则上可以完全不需要MyISAM数据表类型了,所有的系统表都可以放到InnoDB之中。

SQL角色

角色是一系列权限的集合。可以创建角色,给某个用户授予和去除角色。这对于权限管理很方便。

utf8mb4字符集将成为默认字符集,并支持Unicode 9

默认字符集将从 latin1 改为 utf8mb4,默认定序collation将从latin1_swedish_ci 改为 utf8mb4_800_ci_ai。

不可见索引

可以将一些索引设置为不可见,这样SQL优化器就不会用到它,但是它会继续在后台保持更新。当有需要时,可以随时恢复可见。

对二进制数据可以进行位操作

不仅仅可以对 BIGINT进行位操作,从8.0开始也支持对 [VAR]BINARY/[TINY|MEDIUM|LONG]BLOB进行位操作了。

改进了对IPv6和UUID的操作

INET6_ATON() 和 INET6_NTOA() 现在可以进行位操作了,因为INET6_ATON()现在返回的是VARBINARY(16) 数据类型(128位)。改进了UUID操作,引入了三个新的函数 UUID_TO_BIN(), BIN_TO_UUID()和 IS_UUID() 。MySQL并没有特殊的IPv6和UUID数据类型,而是以VARBINARY(16) 数据类型保存的。

持续性的全局变量

可以用 SET PERSIST 来设置持久性的全局变量,即便服务器重启也会保持下来。

性能数据库Performance Schema的改进

比如对性能数据库增加了100多个索引,可以检索更快。

重构SQL分析器

持续不断的逐步改进SQL分析器。旧的分析器由于其语法复杂性和自顶向下的分析方式从而有严重的限制,导致难以维护和扩展。

成本模型

InnoDB缓冲区现在可以估算主内存缓存区中的有多少表和索引,这可以让优化器选择访问方式时知道数据是否可以存储在内存中还是必须存储到磁盘上。

直方图Histograms

通过使用直方图,用户或DBA可以对数据分布进行统计,这可以用于查询优化以寻找优化的查询方案。

改进扫描性能

改进了InnoDB范围查询的性能,可提升全表查询和范围查询 5-20%的性能。

重构BLOB

重构BLOB加速了片段读取/更新操作,可以加速JSON数据的操作。

持久化自增值

InnoDB会持久化保持自增序列的最大值到redo日志中。这个改进还修复了一个非常老的199号bug。

临时表

取消对压缩临时表的支持,并存储临时表的元数据到内存中。

其它的更多重要改进和细节,请参考MySQL 8.0.0 发布公告[1]和这里[2]。

下载

目前8.0.0还是开发版本,如果你希望体验和测试最新特性,可以从 dev.mysql.com[3] 下载各个平台的安装包。不过,MySQL软件包是越来越大了,Linux平台上的二进制打包后就将近有1 GB。如果在产品环境中使用,在8.0没有进入稳定版本之前,请继续使用5.7系列,当前最新的版本是5.7.15 GA版本——这只有600 M多。

最新的源代码放在 GitHub 上,感兴趣的朋友可以去看看,其中有不少是中国人的贡献。

从MySQL8.0开始支持隐藏索引特性,也就是所谓的invisible index。对于不可见的索引,优化器将直接忽略掉。我们可以通过该特性来影响优化器的行为。另外这也可以视为在drop一个索引之前的缓冲,临时把索引设置为不可见后,再观察应用是否正常或有报错什么的,如果一切OK,再最终删除。

对应的8.0.0的release note:

QQ图片20170207162820.png

测试

# 创建一个普通的表t1,只带主键
mysql> create table t1 (a int primary key auto_increment, b int, c int, d int);
Query OK, 0 rows affected (0.67 sec)
# 增加一个索引
mysql> alter table t1 add key(b);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> show indexes from t1\G
*************************** 1. row ***************************
        Table: t1
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: a
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
*************************** 2. row ***************************
        Table: t1
   Non_unique: 1
     Key_name: b
 Seq_in_index: 1
  Column_name: b
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
2 rows in set (0.01 sec)
从show indexes的visible列显示了,这两个索引都是可见的。
# Load some data
insert into t1 select NULL, rand()*100000, rand()*10000,rand()*10000;
insert into t1 select NULL, rand()*100000, rand()*10000,rand()*10000 from t1;
insert into t1 select NULL, rand()*100000, rand()*10000,rand()*10000 from t1;
....
analyze table t1;
mysql> explain select * from t1 where b > 5000 limit 10;
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+-----------------------+
| id | select_type | table | partitions | type  | possible_keys | key  | key_len | ref  | rows | filtered | Extra            |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+-----------------------+
|  1 | SIMPLE     | t1   | NULL     | range | b         | b   | 5     | NULL | 1932 |   100.00| Using index condition |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+-----------------------+
1 row in set, 1 warning (0.00 sec
可以看到索引b被使用到
# 修改索引b为不可见
mysql> alter table t1 alter index b invisible;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> show indexes from t1\G
*************************** 1. row ***************************
        Table: t1
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: a
    Collation: A
  Cardinality: 2048
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
*************************** 2. row ***************************
        Table: t1
   Non_unique: 1
     Key_name: b
 Seq_in_index: 1
  Column_name: b
    Collation: A
  Cardinality: 2029
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: NO
2 rows in set (0.01 sec)
mysql> explain select * from t1 where b > 5000 limit 10\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 2048
     filtered: 33.33
        Extra: Using where
1 row in set, 1 warning (0.00 sec)
当索引被修改为invisible后,优化器将不再选择这个索引
# 将索引重新修改为可见
mysql> alter table t1 alter index b visible;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> explain select * from t1 where b > 5000 limit 10\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
   partitions: NULL
         type: range
possible_keys: b
          key: b
      key_len
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-12-05mysql安装后添加gbk字符集的方法
  • 2018-12-05SQL Server中网络备份一例
  • 2018-12-05分页存储过程代码
  • 2018-12-05Mysql数据库绿色版如何安以及解决1067错误图文教程
  • 2017-05-11mysql5.0版本下载地址集合
  • 2018-12-05SQL SERVER数据库开发之存储过程应用
  • 2018-12-05关于mysql调用经常犯的11个错误的总结
  • 2017-05-11Mysql LONGBLOB 类型存储二进制数据 (修改+调试+整理)
  • 2018-12-05在CentOS上MySQL数据库服务器配置方法
  • 2018-12-05阿拉伯数字转大写中文_财务常用sql存储过程

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql学习之表的基本操作的代码分享
    • 将oracle的create语句更改为alter语句使用
    • Python快速教程(补充篇04):Python简史
    • MySQL中explain的使用以及性能分析
    • mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法
    • 基于ubuntu中使用mysql实现opensips用户认证的解决方法
    • MySQL 重装MySQL后, mysql服务无法启动
    • MySQL定义异常和异常处理详解
    • mysql unsigned 用法及相减出现补数溢出解决方法
    • 讲述一个mysql 数据库恢复的实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有