mysql8 直方图_MySQL 8.0直方图 深入理解

MySQL8.0 新功能直方图,继承于Oracle ,MairaDB的实现方式。

那下面从mysql角度认识下,直方图是什么。先看下官方直方图的实现方式。

8feaba31a67aebdeea4a1dd874a58f53.png

从上图上可以看到原来是ANALYZE命令。先了解一下MySQL里 ANALYZE命令到底有什么用。

ANALYZE

在MySQL里提交一条查询SQL语句时,优化器会选在一个最优的执行方案,并用最小的代价去执行语句。在数据库里面,扫描行数是影响执行代价的因素之一。扫描的行数越少,意味着资源资源越少,扫描行数是怎么判断,是通过索引的基数来得到值和row。

mysql>SHOW INDEX FROM table_name

c0665f28106277ad3e83bf8643577f13.png

执行计划里出现的Cardinality(基数)字段,是非常重要的:

基数计算是采样统计,如果把整张表取出来一行行统计,虽然可以得到精确的结果,但是代价太高。采样统计的时候InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。而数据表是会持续更新的,索引统计信息也不会固定不变。所以,当变更的数据行数超过 1/M 的时候,会自动触发重新做一次索引统计。

61337c73a3ddae36ba4f13f5eb42f5bb.png

基数很容易不准,除了基数优化器还要判断,执行这个语句本身要扫描多少rows 预计扫描行数.

因为统计信息不对,cardinality大大少于数据的实际散列程度,那么索引就有可能失效。

下面看看基数变化的情况:

1.第一次创建表导入数

5585c90ddb4c457222d21a7304d416df.png

2.第二次把表drop掉,导入数据

9c59dcc177ab1666de40f39d2a3f6063.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值