广告
返回顶部
首页 > 资讯 > 数据库 >浅析MySQL的基数统计
  • 947
分享到

浅析MySQL的基数统计

MySQL统计MySQL基数统计 2022-05-26 19:05:15 947人浏览 薄情痞子
摘要

一、基数是啥? Cardinality指的就是Mysql表中某一列的不同值的数量。 如果这一类是唯一索引,那基数 = 行数。 如果这一列是sex,枚举类型只有男女,那它是基数就是2 Cardinality越高,列就越

一、基数是啥?
Cardinality指的就是Mysql表中某一列的不同值的数量。

如果这一类是唯一索引,那基数 = 行数。

如果这一列是sex,枚举类型只有男女,那它是基数就是2

Cardinality越高,列就越有成为索引的价值。mysql执行计划也会基于Cardinality选择索引。

通过下面的方式可以看到表中各列的基数。

比如这个经典的例子:
有一列为sex,那对于sex列中存储的值来说 非男即女,它的基数最大就是2。
那也就完全没有必要为sex建立索引。因为,为了提升你基于sex的查询速度,Mysql会为你选择的这个新索引创建一棵全新的B+Tree。但你sex只有两种值,对于MySQL来说,即使它为你指定的列建立了B+Tree索引,真正执行查询时,最多进行一次二分查询,剩下的操作只能是遍历,所以为sex创建索引意义不大。

二、InnoDB更新基数的时机?
参数:innodb_stats_auto_recalc控制MySQL是否主动重新计算这些持久性的信息。默认为1表示true,0表示false。
默认情况下当表中的行变化超过10%时,重新计算基数信息。

三、基数是估算出来

基数并不会实时更新!而且它是通过采样估算出来的值!

至于基数的公式是怎样的,可能并不重要。

重要的是你得知道,他是通过随机采样数据页的方式统计出来的一个估算值。

而且随机采样的页数可以通过参数innodb_stats_persistent_sample_pages 设置,默认值是20。

这就意味着 基数值并不准确,甚至你每次计算的结果相擦还是蛮大的。

四、持久化基数

可以通过参数innodb_stats_persistent 控制是否持久化基数,默认为off。

当然你可以为一个单独的表设置 STATS_PERSISTENT=1 那么它的 innodb_stats_persistent将自动被启用。

开启它的好处是:重启MySQL不会再重复计算这个值,加快重启速度。

五、如何主动更新基数?

执行下面的SQL时都会触发InnoDB更新基数(即使你并没有意识到它会更新基数)。

所以尽量选择一个业务低峰期

analyze table tableName;

如果因为采样的数量太少了,计算的基数错的离谱。那很可能会导致MySQL的优化器选错索引。这是你可以将这个值适当调大。但是增加 太多可能会导致 ANALYZE TABLE运行缓慢。

反之, ANALYZE TABLE运行太慢。你可以适度调整参数innodb_stats_persistent_sample_pages 的值。但是这又可能导致基数计算的不准确。

如果没有办法平衡两者的关系。可以考虑减少表中索引列的数量或限制分区的数量以降低 ANALYZE TABLE复杂性。表的主键中的列数也很重要,因为主键列被附加到每个非唯一索引中。

参考:

https://dev.mysql.com/doc/refman/5.7/en/innodb-persistent-stats.html

Https://dev.mysql.com/doc/refman/5.7/en/innodb-analyze-table-complexity.html

以上就是浅析MySQL的基数统计的详细内容,更多关于MySQL 基数统计的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 浅析MySQL的基数统计

本文链接: https://www.lsjlt.com/news/9977.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅析MySQL的基数统计
    一、基数是啥? Cardinality指的就是MySQL表中某一列的不同值的数量。 如果这一类是唯一索引,那基数 = 行数。 如果这一列是sex,枚举类型只有男女,那它是基数就是2 Cardinality越高,列就越...
    99+
    2022-05-26
    MySQL 统计 MySQL 基数统计
  • 浅谈MySQL 统计行数的 count
    MySQL count() 函数我们并不陌生,用来统计每张表的行数。但如果你的表越来越大,且是 InnoDB 引擎的话,会发现计算的速度会越来越慢。在这篇文章里,会先介绍 count() 实现的原理及原因,然后是 c...
    99+
    2022-05-31
    MySQL count MySQL 统计行数
  • MySQL 参数浅析之 sql_log_bin
    有很多时候,我们会希望一条SQL语句只在Master数据库上执行,而不复制到Slave数据库,这时候,sql_log_bin这个参数就正是你需要的。例如,我们希望将数据只导入主库,但Slave数据库保持不变...
    99+
    2022-10-18
  • 基于radius的Mysql计费系统数据迁移
    radius计费系统向蓝海计费系统数据迁移技术总结本文仅供参考,在实际环境中测试成功。欢迎大家提出问题。1.    首先要有一个清晰的思路和明确的目标。本次计费迁移主...
    99+
    2022-10-18
  • mysql中的锁浅析
    前言 MySQL 锁机制是保证多个并发事务同时访问数据库时数据一致性的重要手段,也是 MySQL 的重要特性之一。在实际开发使用 MySQL 数据库时,了解并掌握 MySQL 的锁机制非常重要,因为...
    99+
    2023-09-15
    mysql 数据库 锁机制
  • 如何浅析C++仿函数的基本概念
    这期内容当中小编将会给大家带来有关如何浅析C++仿函数的基本概念,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C++编程语言为我们带来了非常大的好处。不过即使是我们经常使用的功能也有很多比较高深的内容值得...
    99+
    2023-06-17
  • 浅析Spring基于注解的AOP
    目录一、准备工作二、基于注解的AOP之前置通知三、基于注解的AOP之切入点表达式的语法和重用以及获取连接点的信息①切入点表达式的语法②获取连接点的信息③重用写入点表达式一、准备工作 ...
    99+
    2022-11-13
    Spring AOP Spring基于注解的AOP
  • 浅析MySQL的lru链表
    一、简述传统的LRU链表 LRU:Least Recently Used 相信大家对LRU链表是不陌生的,它算是一种基础的数据结构吧,而且想必面试时也被问到过什么是LRU链表,甚至是让你手写一个LRU链表。 如果你读...
    99+
    2022-05-26
    MySQL 链表 MySQL lru链表
  • python怎么应用于数据的基础统计分析
    小编给大家分享一下python怎么应用于数据的基础统计分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编...
    99+
    2023-06-14
  • 浅析node连接数据库(express+mysql)
    操作是在ubuntu系统的下环境,简单记录一下过程。 首先用apt-get安装数据库,键入命令 sudo apt-get install mysql-server , 一路回车,然后在一个界面设置一下数据库...
    99+
    2022-06-04
    连接数据库 node mysql
  • 浅析开源数据库MySQL架构
    数据库是所有应用系统的核心,故保证数据库稳定、高效、安全地运行是所有企业日常工作的重中之重。数据库系统一旦出现问题无法提供服务,有可能导致整个系统都无法继续工作。所以,一个成功的数据库架构在高可用设计方面也...
    99+
    2022-10-18
  • Mysql中千万数据查询浅析
    假如mysql数据库中有一千万数据,如何进行查询,查询效率如何,下面进行简单的分析。 1、准备数据 也许有些人没遇见过上千万数据量的表,没关系,下面通过sql脚本准备一下数据,环境为:mysql...
    99+
    2023-09-15
    mysql 数据库 千万条数据
  • C++浅析类与对象的基础
    目录面向过程和面向对象类的引入访问限定符封装类的作用域类的实例化面向过程和面向对象 类和对象是 C++ 的核心特性 我们之前的C语言就属于面向过程,关注过程,分析求解问题的步骤再通过...
    99+
    2022-11-13
  • Spring中RedisTemplate的基本使用浅析
    目录spring-data-redis项目使用步骤spring-data-redis项目   spring-data-redis提供了在Spring应用中通过简单...
    99+
    2023-02-21
    Spring RedisTemplate Spring RedisTemplate基本操作
  • MySQL统计信息的示例分析
    这篇文章主要为大家展示了“MySQL统计信息的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL统计信息的示例分析”这篇文章吧。MySQL统计信息...
    99+
    2022-10-18
  • nginx中一个请求的count计数跟踪浅析
    首先说明一下应用方式,有两个nginx的模块,一个名为jtxy,另一个名为jtcmd。一个http请求来了,会进入jtxy的模块处理,jtxy会创建出一个子请求发送给jtcmd,jt...
    99+
    2022-11-12
  • pandas中的数值计算及统计基础
    1 import pandas as pd 2 import numpy as np 3 4 df = pd.DataFrame({ 5 'key1': [4, 5, 3, np.nan, 2], 6 ...
    99+
    2023-01-31
    数值 基础 pandas
  • 浅析vue侦测数据的变化之基本实现
    目录一、Object的变化侦测二、关于 Object 的问题三、Array 的变化侦测3.1、背景3.2、实现四、关于 Array 的问题一、Object的变化侦测 下面我们就来模拟...
    99+
    2022-11-12
  • 分析函数— —统计
    很多需求中都涉及到统计:均值、累计、范围均值、相邻记录比较等。这些操作会统计多次,或有明确的统计范围,或返回的记录统计的数据集不同...根据场景不同可分为如下几类:     &...
    99+
    2022-10-18
  • 浅析Promise的介绍及基本用法
    Promise是ES6引入的异步编程的新解决方案。语法止Promise是-一个构造函数, 用来封装异步操作并可以获取其成功或失败的结果。 Promise 构造函数: Pro...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作