mysql为什么选错索引?怎么解决?

mysql为什么选错索引?

在进行慢SQL分析的时候,有时候我们会发现explain的扫描行数和慢日志中的行数相差很大,那explain中的rows这个扫描行数是怎么判断的?

  其实MySQL在真正开始执行语句之前,并不能精确的满足这个条件的记录有多少行,而只能根据统计信息来估算记录数。

  这个统计信息就是索引的“区分度”,显然,一个索引上不同的值越多,这个索引的区分度就越好。而一个索引上不同的值的个数,我们称之为“基数”(cardinality)也就是说,这个基数越高,索引的区分度越好。

  日常中我们可以通过”show index from tablename看到一个索引的基数。

 

MySQL怎样得到索引基数?

  Mysql是通过采样统计的方法。为什么要采样统计呢?因为把整张表取出来一行行统计,虽然可以得到精确的结果,但是代价太高了,所以只能选择“采样统计”。

  采样统计的时候,InnoDB默认会选择N个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。

  而数据表是会持续更新的,索引统计信息也不会固定不变。所以,当变更的数据行数超过1/M的时候,会自动触发重新做一次索引统计。

  MySQL中,有两种存储索引的方式,可以通过设置参数innodb_stats_persistent的值来选择:

  当设置为on的时候,表示统计信息会持久化存储。这时,默认的N20,M10.

  设置为off的时候,表示统计信息只存储在内存中。这时,默认的N8M16.

  由于是采样统计,所以不管N20还是8,这个基数都是很不准确的。

 

索引选择异常处理办法

  • 采用force index 强行选择一个索引。
  • 修改sql语句、引导MySQL使用我们期望的索引。
  • 在有些场景下,我们可以新建一个更适合的索引,来提供给优化器做选择,或删除掉误用的索引。

由于索引统计信息的不准确,可以用analyze table来解决。

而对于其它优化器误判断的情况,你可以在应用端用force index 来强行指定索引,也可以通过修改语句来引导优化器,还可以通过增加或者删除索引来绕过这个问题。

 

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

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

相关文章

复制带随机节点的链表

题目: 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的深拷贝。 解题思路: 这道题的一个难点就是链表中的随机指针,我能想到的就是在这个链表的每个节…

北斗三号系统第九、十颗组网卫星三大看点

来源:新华网29日,北斗三号第九颗、第十颗卫星在西昌卫星发射中心腾空而起,此次发射的两颗卫星是北斗导航全球组网从最简系统迈向基本系统的首组卫星。北斗的建设,像一场马拉松比赛,既考验耐力又比拼速度。作为“北斗大…

写代码这条路,能走多远?

职场危机感似乎是每个人在职业生涯都会遇到的话题,我对这种危机处境和自己曾遇到的问题进行了一番思考, 参考了其他人的一些结论并结合自身的经历,设计了应对的初步方案。 通过这篇文章,希望能给大家一些启发,也欢迎大…

【笔记】用正则匹配字符串的方法摘抄

<script type"text/javascript"> <!-- var zhengze /as/g; alert(typeof zhengze) var zfc asjkkjkjasjkjlkjas; //正则的方法 aa zhengze.exec(zfc)//返回找到第一个as&#xff0c;一般会配合index使用 bb zhengze.test(zfc)//返回的是否找到as的bool…

AMD VS 英特尔:芯片制造实力似乎正在发生逆转!

来源&#xff1a;网易智能参与: 天门山据国外媒体MarketWatch报道&#xff0c;芯片制造业似乎正在发生重大变化&#xff0c;AMD好像成为和对手英特尔竞争的赢家。在这两家芯片制造商本周公布季度财报之后&#xff0c;分析师表示&#xff0c;英特尔陷入产品延迟和管理上的不确定…

把数组排列成最小的数(详解)

题目&#xff1a; 输入一个正整数数组&#xff0c;把数组里所有数字拼接起来排成一个数&#xff0c;打印能拼接出的所有数字中最小的一个。例如输入数组{3&#xff0c;32&#xff0c;321}&#xff0c;则打印出这三个数字能排成的最小数字为321323。 题目解析&#xff1a; 看到…

Linux tar命令详解

tar -c: 建立压缩档案 -x&#xff1a;解压 -t&#xff1a;查看内容 -r&#xff1a;向压缩归档文件末尾追加文件 -u&#xff1a;更新原压缩包中的文件 这五个是独立的命令&#xff0c;压缩解压都要用到其中一个&#xff0c;可以和别的命令连用但只能用其中一个。下面的参数是根…

人工智能预测AI系统的“心灵”与“行为”

来源&#xff1a;中国科学网任何同Siri或Alexa有过令人沮丧的互动体验的人都知道&#xff0c;数字助理无法同人类媲美。而它们需要的是被心理学家称为“心智理论”的东西—— 一种意识到其他人的信念和欲望的能力。如今&#xff0c;计算机科学家创建了能窥探其他计算机“心灵”…

Linux grep命令详解

Linux grep命令用于查找文件里符合条件的字符串。 grep指令用于查找内容包含指定的范本样式的文件&#xff0c;如果发现某文件的内容符合所指定的范本样式&#xff0c;预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称&#xff0c;或是所给予的文件名为&q…

java基础1

1. 变量须先声明&#xff0c;再赋值&#xff0c;才使用。 &#xff08;1&#xff09;方法内的变量叫局部变量&#xff0c;方法外的变量叫成员变量 &#xff08;2&#xff09;基本数据类型&#xff1a;4类8种。 其余的叫引用数据类型。 &#xff08;3&#xff09;变量作用域&…

Firebug控制台详解[转]

Firebug是网页开发的利器&#xff0c;能够极大地提升工作效率。 但是&#xff0c;它不太容易上手。我曾经翻译过一篇《Firebug入门指南》&#xff0c;介绍了一些基本用法。今天&#xff0c;继续介绍它的高级用法。 Firebug控制台详解 作者&#xff1a;阮一峰 控制台&#xff0…

跳石板(详解)

题目链接&#xff1a; https://www.nowcoder.com/practice/4284c8f466814870bae7799a07d49ec8?tpId85&&tqId29852&rp1&ru 题目分析&#xff1a; 这道题就是计算从N开始加&#xff0c;最少加几次等于M&#xff0c;前提条件是每次相加的数必须是当前数的约数 思…

Python面试题大全(一):基础知识学习

目录 Python基础 文件操作 1.有一个jsonline格式的文件file.txt大小约为10K 2.补充缺失的代码 模块与包 3.输入日期&#xff0c; 判断这一天是这一年的第几天&#xff1f; 4.打乱一个排好序的list对象alist&#xff1f; 数据类型 5.现有字典 d {a:24,g:52,i:12,k:33}请…

智能机器人与系统高精尖创新中心2018年度开放基金项目申报通知

来源&#xff1a;机器人大讲堂摘要&#xff1a;为推动中心的基础研究和关键技术的自主创新&#xff0c;聚集和培养优秀青年科技人才&#xff0c;使中心成为国内智能机器人与系统领域高水平科学和技术研究的重要基地&#xff0c;特设立开放基金。智能机器人与系统高精尖创新中心…

分享一个基于jQuery,backbone.js和underscore.js的消息提示框架 - Backbone.Notifier

在线演示 本地下载 我们曾今在以前的文章中介绍过jQuery的警告和提示框插件&#xff0c;今天这里我们介绍一个开源的消息提示框架 Backbone.Notifier&#xff0c;目前版本为version0.1。使用这个框架可以帮助你构建非常灵活强大的浏览器端消息提示功能。这个框架依赖于&#…

杨辉三角变形(高效解析)

题目链接&#xff1a; https://www.nowcoder.com/practice/8ef655edf42d4e08b44be4d777edbf43?tpId37&&tqId21276&rp1&ru 题目解析&#xff1a; 拿到这道题大多数人的第一反应都是先将杨辉三角用一个二维数组表示出来&#xff0c;然后直接在第n行找就可以了&a…

Python面试题大全(二):python高级语法

目录 Python高级 元类 42.Python中类方法、类实例方法、静态方法有何区别&#xff1f; 43.遍历一个object的所有属性&#xff0c;并print每一个属性名&#xff1f; 44.写一个类&#xff0c;并让它尽可能多的支持操作符? 45.介绍Cython&#xff0c;Pypy Cpython Numba各有…

生物科技发展与人类命运共同体塑造

来源&#xff1a;学习时报摘要&#xff1a;生物科技的发展是人类文明发展的缩影。当前&#xff0c;生物科技的新一轮变革&#xff0c;正广泛渗透到人类经济、社会、文化、军事、政治等领域&#xff0c;其对人类伦理、法律、环境、安全、国际关系等领域的影响越来越大。生物科技…

和为S的连续正数序列(双指针详解)

题目解析&#xff1a; 题目是小明算数&#xff0c;这里不赘述&#xff01;->题目链接<-   看到这道题目的可以马上想到等差数列&#xff0c;这个题目可以换一种说法就是求有多少个等差数列的和为sum&#xff0c;可以直接用公式计算&#xff0c;但是公式计算个人感觉有一…

Python面试题大全(三):Web开发(Flask、爬虫)

目录 Web Flask 140.对Flask蓝图(Blueprint)的理解&#xff1f; 141.Flask 和 Django 路由映射的区别&#xff1f; Django 142.什么是wsgi,uwsgi,uWSGI? 143.Django、Flask、Tornado的对比&#xff1f; 144.CORS 和 CSRF的区别&#xff1f; 145.Session,Cookie,JWT的…