1基数是啥?

大白话讲:基数指的就是MySQL表中某一列的不同值的数量。

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

如果这一列是sex,枚举类型只有男女,那它是基数就是2。Cardinality越高,列就越有成为索引的价值。MySQL执行计划也会基于Cardinality选择索引。通过下面的方式可以看到表中各列的基数。

比如这个经典的例子:有一列为sex,那对于sex列中存储的值来说 非男即女,它的基数最大就是2。

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

2InnoDB更新基数的时机?

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

3基数是估算出来的!

基数并不会实时更新!而且它是通过采样估算出来的值!至于基数的公式是怎样的,可能并不重要。重要的是你得知道,它是通过随机采样数据页的方式统计出来的一个估算值。而且随机采样的页数可以通过参数:

innodb_stats_persistent_sample_pages设置,默认值是20。

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

4基数的持久化机制

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

当然你可以为一个单独的表设置 STATS_PERSISTENT=1那么它的

innodb_stats_persistent将自动被启用。

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

5如何主动的更新基数?

执行下面的SQL时都会触发InnoDB更新基数(即使你并没有意识到它会更新基数)。所以尽量选择一个业务低峰期。analyze table tableName;

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

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

mysql基数是什么意思_谈谈MySQL中的基数是啥?相关推荐

  1. mysql怎么删除临时表里的数据_谈谈MySQL数据库中临时表的应用

    MySQL在很多情况下都会用到临时表总结一下什么时候会用到临时表 什么是临时表MySQL用于存储一些中间结果集的表临时表只在当前连接可见当关闭连接时Mysql会自动删除表并释放所有空间. 以下讨论的是 ...

  2. mysql悲观群_谈谈mysql的悲观和乐观锁

    悲观锁与乐观锁是两种常见的资源并发锁设计思路,也是并发编程中一个非常基础的概念.之前有写过一篇文章关于并发的处理思路和解决方案,这里我单独将对这两种常见的锁机制在数据库数据上的实现进行比较系统的介绍一 ...

  3. mysql 自动化运维工具_部署MySQL自动化运维工具inception+archer

    *************************************************************************** 部署MySQL自动化运维工具inception+ ...

  4. mysql 按时间累计计算_精通MySQL索引背后的数据结构及算法原理

    本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,mysql支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree ...

  5. mysql面试常问 1: 谈谈MySQL表级锁和行级锁

    谈谈MySQL表级锁和行级锁 表级锁与索引无关 行级锁与索引的关系呢??答案是有关系的,但是要具体分析不同情况 主键索引与 行级锁的关系 非主键索引与行级锁的关系 实验如下: CREATE TABLE ...

  6. mysql pmt函数怎么用_在Golang中如何正确地使用database/sql包访问数据库

    本文记录了我在实际工作中关于数据库操作上一些小经验,也是新手入门golang时我认为一定会碰到问题,没有什么高大上的东西,所以希望能抛砖引玉,也算是对这个问题的一次总结.其实我也是一个新手,机缘巧合几 ...

  7. mysql数据库调优 面试_面试-MySQL篇:数据库调优

    今天谈谈 MySQL 的调优问题,比较偏项目实战.面试中也喜欢问 "xxx如何优化"的问题,这类问题相对开放,一不小心就变成了送命题,但是风险与机遇并存,假如你能理论结合项目经验给 ...

  8. mysql和python的关系_八MySQL与Python

    <1>数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. ...

  9. mac下安装mysql 5.7.11卡住_【mysql】Mac下安装mysql5.7 完整步骤,大坑已解决

    最近使用Mac系统,准备搭建一套本地web服务器环境.因为Mac系统自带PHP和apach,但是没有自带mysql,所以要手动去安装mysql,本次安装mysql最新版5.7.17. 1.官网下载 点 ...

最新文章

  1. ChipScope Pro分析仪
  2. matlab qtdecomp,Opencv图像识别从零到精通(25)------区域分裂与合并
  3. SuperSocket框架命令不被识别的一种原因
  4. ajax成功跨域_自己写的
  5. can总线报文是固定的吗_CAN总线传输协议
  6. 笔记本电脑黑屏但还在运作怎么办
  7. MQTT客户端程序的编写
  8. 冰点--免积分下载百度文库、豆丁、道客巴巴文章
  9. java里面getsource_java e.getsource
  10. 轻松与劳氏Lowe‘s 对接 EDI 要准备什么?
  11. day18私有化、关联、继承
  12. html中创建母版页,自定义“我的网站”母版页
  13. c语言课程设计总结心得大全,c语言课程设计的心得体会
  14. Integration of image quality and motion cues for face anti-spoofing A neural network approach
  15. Time.realtimeSinceStartup——秒秒秒单位
  16. cursor常用的属性值
  17. PHP - 关于empty()
  18. 高职高专院校的消防工作和措施
  19. VPS服务器主要用来做什么?
  20. 全国高校计算机二级WORD试题,(word)全国计算机等级考试二级笔试试题及答案.doc...

热门文章

  1. 什么是集电极开路(OC)?什么是漏极开路(OD)?为什么必须要在OC门输出的IO口上加上拉电阻?
  2. 解决Office 2010出现the setup controller has encountered a problem...
  3. ENAS pygraphviz 的替换之路
  4. pytorch使用gpu就是这么简单
  5. mongodb 按配置文件mongodb.conf启动
  6. 讨论Linux目录结构
  7. [译] PHP7 数组:HashTable
  8. 《AngularJS实战》——3.1 模板中的过滤器
  9. 专访Matt Klein关于在Lyft构建Envoy的问答
  10. Groonga 2.1.1 发布,嵌入式的全文搜寻引擎 - 开源中国 OSChina.NET