oracle 几个字段中某个字段大于0其他字段不再进行统计?_如何深入理解MySQL 8.0直方图?...

fef785acb2774029996de96e15ff464c.png

MySQL8.0 新功能直方图,继承于Oracle ,MairaDB的实现方式。 那下面从mysql角度认识下,直方图是什么。先看下官方直方图的实现方式。

1fcb7f5f17324370bbb236b481f19793.png

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

ANALYZE

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

mysql>SHOW INDEX FROM table_name

622b64a26b6f63b4f5d80b7cf76707ee.png

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

1995c2ce2dcf1ba63fbe52fb91706a89.png

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

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

下面看看基数变化的情况: 1.第一次创建表导入数

ebcbfed1443b37d051a7d463c6d5d393.png

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

e6947829387df706d006ba64834159da.png

在这种情况下就会使用analyze table 命令2次

b956d8e10bfea870d436159494ab440d.png

上面是2次,ANALYZE TABLE命令进行修复索引。在不停的浮动。 分析表通过对每个索引树执行随机潜水并相应地更新索引基数估计值来确定索引基数,所以这个值也不是100%准确。

ANALYZE TABLE的作用:

  • 统计索引分布信息。
  • 对于 MyISAM 表,相当于执行了一次 myisamchk --analyze
  • 支持 InnoDB.NDB.MyISAM 等存储引擎,但不支持视图(view)
  • 执行时,会对表加上读锁(read lock)
  • 该操作会记录binlog,可以在analyze和table之间添加关键字local取消写入

ANALYZE TABLE风险:

  • analyze table的需要扫描的page代价粗略估算公式:sample_pages * 索引数 * 表分区数。
  • 因此,索引数量较多,或者表分区数量较多时,可能会比较费时,要评估代价,并默认只在负载低谷时执行。
  • 如果某个表上当前有慢SQL,此时执行analyze table,则该表后续的查询均会处于waiting for table flush的状态,严重的话会影响业务,因此执行前必须先检查有无慢查询。
直方图

通过ANALYZE操作了解到,在数据库中查询优化所需的指标抽取方式。有时候,查询优化器会走不到最优的执行计划,导致花费了更多不必要的时间。直方图就是解决这样的问题.

直方图能近似获得一列的数据分布情况,从而让数据库知道它含有哪些数据。将数据分到了一系列的buckets中去。MySQL会自动将数据划到不同的buckets中,也会自动决定创建哪种类型的直方图。

1)从代码实现中,MySQL支持了两种:等宽直方图(singleton).等高直方图(equi-height)。

c16b13d23e478a650e1cb408ab030340.png

2)两个直方图区别在于equi-height 多了 下限和上限的指标。

9f7afc501cd36e7801d10c712715708a.png

3)选择直方图判断逻辑是:如果指定的桶数大于或等于桶数 对于不同的值,创建一个单例直方图。否则创建一个等高直方图。

aa668fc53d57b7e95bf4a134ac7d1991.png

...

本文接下来还有:

  1. 直方图命令
  2. 测试
  3. 总结

完整内容,请访问墨天轮平台【原文】进行查看~

425868817114fdb3aeb4386fa3cae357.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

godaddy修改php版本,Godaddy美国主机Plesk面板修改PHP版本教程

由于不同的需求,我们站长朋友们建站所用的网站程序也不尽相同,有PHP、ASP和ASP.NET等。Godaddy美国主机作为全球最大域名主机商,当之无愧成为站长使用最多的主机。不少朋友应该都知道不同的网站程序对于PHP和ASP的版本要求又不一样&#xff0…

mysql数据结构_mysql的底层数据结构

一.数据结构1. 二叉树特点:左侧子节点比父节点小,右侧子节点比父节点大(对于同一个父节点下的两个子节点)缺点:对于一直递增得数据不能存在该数据结构中,会变成链表,不能降低树的高度图 1-1图1-22. 红黑树特…

winform判断线程有没有完成_并发编程系列1:线程池的架构实现、大小配置、及四种线程池使用...

△ 公众号回复关键词“架构” 即可领取《1500BAT架构及面试专题合集》本篇为线程池系列文章之一,不经常使用线程池的童鞋,还有对几种线程的使用不甚了解的童鞋,可以读一下此文,并关注后续线程池相关文章连载。 本篇内容大纲&#…

python枚举是什么意思,什么是枚举python

枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、状态等。Python 的原生类型(Built-in types)里并没有专门的枚举类型,但是我们可以通过很多方法来实现它,例如字典、类等&#x…

拖拽批量上传图片如何保证 顺序_图片压缩神器和图片分割工具,美工设计和运营终于得救了...

想要快速互联网干货技巧?请(置顶)星标我们好不容易写好文案,设计好长图海报,上传到微信公众号,竟然提示上传图片体积不得超过5M,怎么办?怎么办?不得已,只好又返回Ps里降低…

php将word转txt,PHP如何将将word文件转为pdf

PHP将word文件转为pdf的方法:首先修改【php.ini】,并重启环境;然后安装微软office套件;最后配置office组件服务即可。PHP将word文件转为pdf的方法:1、修改php.ini添加:extensionphp_com_dotnet.dll去除注释…

redis一般缓存什么样数据_SpringBoot+Redis轻松实现数据缓存

1.为什么需要缓存为什么需要缓存,我相信搞开发的都能回答出来,无非就是为了降低数据库压力,节约资源,提升系统性能。而事实上也确实是,归根结底就是降压,高并发,高性能。不过,大厂里…

红旗linux安装oracle,Redflag Linux安装Oracle 10gR2 RAC记事

Redflag Linux安装Oracle 10gR2 RAC记事Kamus遇到过:SQL> startup nomountORA-27102: out of memoryLinux-x86_64 Error: 28: No space LEFT ON device这和内核参数 shmall 有关,修改设置 kernel.shmall 16475728 。后来离开没多久,客户打…

springboot开启debug日志_SpringBoot 如何优雅的打印日志?

一、打印日志注意事项1、使用 Slf4j 注解这个代码相信大家都很熟悉,你是否曾经看到或者自己因 copy 而 没有改变“当前类名”?如果你们项目用到 lombok ,可以在类上使用 Slf4j 注解,省去手动写这行代码。2、不建议使用的输出为什么…

windows 映射文件会释放内存吗_Windows系统共享内存管理

一 进程逻辑空间 物理空间​如上图所示,每个进程都有自己的逻辑空间,这些逻辑空间,会被映射到具体的物理空间中。每个进程的逻辑空间都是彼此隔离,相互独立不受干扰的。但是他们都会被映射到同一个物理空间去,当其所映…

linux 文件的组织,Linux文件组织和目录结构

资料:https://www.shiyanlou.com/courses/running1 Linux目录结构说明可以使用tree来查看目录结构sudo apt-get install tree 安装treetree / 查看根目录的结构将目录定义为四种交互作使用的形态:2 路径. 表示当前目录.. 表示上一级目录 - 表示上一次所在…

jeecg 导出的excel不能使用公式_微软:Excel公式是世界上使用最广泛的编程语言...

喜欢就关注我们吧!文|一君微软近日推出了一项 Excel 公式构建的新功能 LAMBDA,正则测试阶段。LAMBDA 允许使用 Excel 自身的公式语言自定义功能,而过去,Excel 中需要通过 JS 等语言编写自定义函数。同时,LAMBDA 还可以…

voip 音频采集时间_蓝牙音频续航监测系统展会现场演示

|点击【美格信】关注☝大家好,我是美格信公众号主编:小M,今天的2020(秋季)亚洲蓝牙耳机展上,我们美格信现场展示了发布的新品-MAGNUM麦金纳蓝牙音频续航监测系统。不过有很多小伙伴因为时间问题,没机会来现场参观&…

linux 运行scrapy,python 文件 运行 scrapy

写了一个scrapy,程序可以跑,没有任何问题。爬下30个网站的body存入json文件,并且保存为test.json如果test.json存在就保存到一个新建的test1.json新建了一个python文件叫check.py,对比两个文件的hash值,如果有不一样&a…

大整数减法c语言_3.2 C语言运算符和表达式

01基本的算术运算符1、正号运算符2、-负号运算符3、*乘法运算符4、/除法运算符5、%求余运算符6、加法运算符7、-减法运算符读者应该特别注意和-在不同情况下的含义02自增、自减运算符1、i,--i在使用i之前,先是i的值加(减)12、i&am…

如何查看linux 是否安装软件包,linux 查看软件包是否安装 linux查看软件包

Linux下怎样检查,如何查看某软件包是否已经安装1、rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”。rpm -qa | grep ruby2、以deb包安装的,可以用dpkg -l能看到。如果是查找指…

trueOS能装linux软件,TrueOS 是什么

TrueOS是一套基于FreeBSD-CURRENT、桌面取向的类Unix操作系统。主要目的是创建一个易于安装软件的图形用户界面,借由提供KDE SC、Lumina、MATE、Xfce等桌面环境使其容易上手。TrueOS 是一套基于 FreeBSD-CURRENT、桌面取向的类 Unix操作系统。主要目的是创建一个易于…

错误: 非法的表达式开始_虽然这两个C语言宏定义很简单,但是能在程序运行前找到错误代码...

今天翻看 Linux 内核源代码时,发现两行非常有意思的C语言代码,如下:#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))#define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); }))有意思的宏这两行C语言代码有什么…

linux下数据库时间格式,Java编程时间格式与数据库中时间格式转化

关于编程语言中的时间格式和关系型数据中的中时间格式问题的转化一直都是个简单而又不得不权衡的问题,这牵扯到数据库设计和SQL编程和应用程序中时间格式数据的处理的编程,两者总能够交缠在一起。关于Java中的时间格式和数据库中的时间格式转换在这里先写…

ue4玻璃材质_UE4-材质

本文中,我们将首先讨论基于物理的渲染,什么是材质域,什么是材质,什么是材质实例,什么是主材质,我们将讨论材质的一些建议和禁忌。最后,我们将了解一些材质概念,你可以将其用于各类项…