关系经济人类预测化学自然
中准网
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

慢查询MySQL定位优化技巧,从10s优化到300ms

3月3日 生死族投稿
  文章目录如何定位并优化慢查询SQL?如何使用慢查询日志?慢查询例子演示,新手都能看懂查询语句慢怎么办?explain带你分析sql执行计划当主键索引、唯一索引、普通索引都存在,查询优化器如何选择?1。如何定位并优化慢查询SQL?
  一般有3个思考方向1。根据慢日志定位慢查询sql2。使用explain等工具分析sql执行计划3。修改sql或者尽量让sql走索引2。如何使用慢查询日志?
  先给出步骤,后面说明
  有3个步骤1。开启慢查询日志
  首先开启慢查询日志,由参数slowquerylog决定是否开启,在MySQL命令行下输入下面的命令:
  默认环境下,慢查询日志是关闭的,所以这里开启。2。设置慢查询阈值setgloballongquerytime1;
  只要你的SQL实际执行时间超过了这个阈值,就会被记录到慢查询日志里面。这个阈值默认是10s,线上业务一般建议把longquerytime设置为1s,如果某个业务的MySQL要求比较高的QPS,可设置慢查询为0。1s。
  发现慢查询及时优化或者提醒开发改写。一般测试环境建议longquerytime设置的阀值比生产环境的小,比如生产环境是1s,则测试环境建议配置成0。5s。便于在测试环境及时发现一些效率的SQL。
  甚至某些重要业务测试环境longquerytime可以设置为0,以便记录所有语句。并留意慢查询日志的输出,上线前的功能测试完成后,分析慢查询日志每类语句的输出,重点关注Rowsexamined(语句执行期间从存储引擎读取的行数),提前优化。3。确定慢查询日志的文件名和路径showglobalvariableslikeslowquerylogfile
  结果会发现慢日志默认路径就是MySQL的数据目录,我们可以来看一下MySQL数据目录
  不用关注这里为什么不是MySQL8。0,这和版本没什么关系的。
  来,直接上菜,干巴巴的定义我自己都看不下去
  我们先来查看一下变量,我框出了需要注意的点
  查询带有quer的相关变量
  这里设置慢查询阈值为1ssetgloballongquerytime1;
  可以看到已经修改过来了
  但是重启mysql客户端设置和统计慢查询日志条数就会清零,即所有配置修改会还原
  命令修改配置之后,在命令行netstopmysql关闭MySQL服务,再netstartmysql开启MySQL服务,接着执行会发现配置还原了。
  在配置文件修改才能永久改变,否则重启数据库就还原了3。慢查询例子演示,新手都能看懂
  数据表结构,偷懒没写commentCREATETABLEpersoninfolarge(idBIGINTUNSIGNEDNOTNULLAUTOINCREMENT,accountVARCHAR(10),nameVARCHAR(20),areaVARCHAR(20),titleVARCHAR(20),mottoVARCHAR(50),PRIMARYKEY(id),UNIQUE(account),KEYindexareatitle(area,title))ENGINEINNODBAUTOINCREMENT1DEFAULTCHARSETutf8
  这里的数据是200W条。请注意表结构,记住哪几个字段有索引即可,后续围绕这个表进行分析。
  这个3。36s并不是实际执行时间,实际执行时间得去慢查询日志去看Querytime参数
  可以看到Querytime:6。337729s,超过了1s,所以会被记录,一个select语句查询这么久,简直无法忍受。
  图中其他的参数解释如下:Time:慢查询发生的时间Querytime:查询时间Locktime:等待锁表的时间Rowssent:语句返回的行数Rowsexanined:语句执行期间从存储引擎读取的行数
  上面这种方式是用系统自带的慢查询日志查看的,如果觉得系统自带的慢查询日志不方便查看,可以使用ptquerydigest或者mysqldumpslow等工具对慢查询日志进行分析。
  注意:有的慢查询正在执行,结果已经导致数据库负载过高,而由于慢查询还没执行完,因此慢查询日志看不到任何语句,此时可以使用showprocesslist命令查看正在执行的慢查询。showprocesslist显示哪些线程正在运行,如果有PROCESS权限,则可以看到所有线程。否则,只能看到当前会话线程。4。查询语句慢怎么办?explain带你分析sql执行计划
  根据上一节的表结构可以知道,account是添加了唯一索引的字段。explain分析一下执行计划。
  我们重点需要关注selecttype、type、possiblekeys、key、Extra这些列,我们来一一说明,看到selecttype列,这里是SIMPLE简单查询,其他值下面给大家列出。
  type列,这里是index,表示全索引扫描
  表格从上到下代表了sql查询性能从最优到最差,如果是type类型是all,说明sql语句需要优化。
  注意:如果typeNULL,则表明个MySQL不用访问表或者索引,直接就能得到结果,比如explainselectsum(12);
  possiblekeys代表可能用到的索引列,key表示实际用到的索引列,以实际用到的索引列为准,这是查询优化器优化过后选择的,然后我们也可以根据实际情况强制使用我们自己的索引列来查询。
  Extra列,这里是Usingindex
  一定要注意,Extra中出现Usingfilesort、Usingtemporary代表MySQL根本不能使用索引,效率会受到严重影响,应当尽可能的去优化。
  出现Usingfilesort说明MySQL对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容,有索引就维护了B树,数据本来就已经排好序了,这说明根本没有用到索引,而是数据读完之后再排序,可能在内存或者磁盘上排序。也有人将MySQL中无法利用索引的排序操作称为文件排序。
  出现Usingtemporary表示MySQL在对查询结果排序时使用临时表,常见于orderby和分组查询groupby
  回到上一个话题,我们看到account是添加了唯一索引的字段。explain分析了执行计划后
  直接按照account降序来查
  查看慢查询日志发现,使用索引之后,查询200W条数据的速度快了2s
  接着我们分析一下查询name的sql执行计划
  然后给name字段加上索引
  加上索引之后,继续看看查询name的sql执行计划
  对比一下前面name不加索引时的执行计划就会发现,加了索引后,type由ALL全表扫描变成index索引扫描。orderby并没有usingfilesort,而是usingindex,这里B树已经将这个非聚集索引的索引字段的值排好序了,而不是等到查询的时候再去排序。
  接着我们继续执行查询语句,此时name已经是添加了索引的。
  结果发现,name添加索引之前,降序查询name是花费6。337729s,添加索引之后,降序查询name花费了3。479827s,原因就是B树的结果集已经是有序的了。
  5。当主键索引、唯一索引、普通索引都存在,查询优化器如何选择?
  查询一下数据的条数,这里count(id),分析一下sql执行计划
  这里实际使用的索引是account唯一索引。
  分析一下:实际使用哪个索引是查询优化器决定的,B树的叶子结点就是链表结构,遍历链表就可以统计数量,但是这张表,有主键索引、唯一索引、普通索引,优化器选择了account这个唯一索引,这肯定不会使用主键索引,因为主键索引是聚集索引,每个叶子包含具体的一个行记录(很多列的数据都在里面),而非聚集索引每个叶子只包含下一个主键索引的指针,很显然叶子结点包含的数据是越少越好,查询优化器就不会选择主键索引
  当然,也可以强制使用主键索引,然后分析sql执行计划
  我们看一下优化器默认使用唯一索引大致执行时间676ms
  强制使用主键索引大致执行时间779ms
  我们可以用forceindex强制指定索引,然后去分析执行计划看看哪个索引是更好的,因为查询优化器选择索引不一定是百分百准确的,具体情况可以根据实际场景分析来确定是否使用查询优化器选择的索引。
投诉 评论 转载

我国国产矿用AI机器人发布,加速中国煤炭产业智能化转型升级近年来,煤炭产业作为我国能源行业的支柱性产业,正积极引入前沿技术,在产业智能化浪潮中走在前列。近日,中国煤科沈阳研究院与中国煤科机器人公司发布基于昇腾AI的机器人解决方案,为煤……中央下令特赦山东一囚犯,到北京连升18级,他到底是何许人也1950年,彼时发生了一件震惊全国的事情。党中央高层干部发出命令,要寻找一位名为牛宝正的人。按理说,这种事情应该是见怪不怪的,当时我国刚刚成立,党中央曾很多次在全国范围内寻找当……腹泻拉肚子,不同的症状,用药也不同!腹泻健康守护计划腹泻拉肚子,注意辨证用药。肖雄。很多人让我推荐,治疗拉肚子的方子,但是我给不了。因为同样一张方子,有的人吃了有用,有所讲究的,经常拉肚子。有的人表现为:口干口苦,大便次数……都江堰市卿宿青城私汤森林民宿望山观野做最温柔的梦来源:原创稿主题小屋。卿宿青城私汤森林民宿供图睡在自然里。卿宿青城私汤森林民宿供图民宿一角。卿宿青城私汤森林民宿供图民宿外观。卿宿青城私汤森林民宿供图……拜仁以8000万欧元签入德利赫特,组成下赛季豪华中卫组合德甲拜仁慕尼黑俱乐部宣布:以8000万欧元从尤文图斯签入中后卫荷兰人德利赫特,至此,拜仁慕尼黑的世界最贵中卫组合诞生:8000万欧元的26岁法国人埃尔南德斯和8000万欧元的2……钓源古村亲子音乐节有关公告春光灿烂嘉游赣钓源古村亲子音乐节有关公告钓源古村十里芳菲景区定于4月1日举办钓源古村亲子音乐节等相关活动,为切实保障现场录制和提前彩排等活动有序进行,钓源古村十里芳……钮文新关注中国经济逻辑之变经济政策必须坚持系统观念《中国经济周刊》首席评论员钮文新中国的经济逻辑正在发生重大变化,坚定不移地弘扬创新、协调、绿色、开放、共享的新发展理念,构建以国内大循环为主体,国内国际双循环相互促进的新……名单公布!涉石家庄保定邯郸邢台沧州近日,河北省文化和旅游厅发布通知,确定28家单位为2022年度省级文明旅游示范单位,15家单位为2022年度省级诚信文明示范景区。一起来看2022年度省级文明旅游示范单位……热火重新洗牌,莱利再现大手笔交易,仅两人为球队非卖品热火本赛季的表现可圈可点,巴特勒再次刷新了人们对他的认知,在季后赛后半段几乎凭借一己之力扛着球队前行,只是最终没有完成跻身东决的愿望,在休赛期会有进一步的补强计划。从热火……科研前线西电郝跃院士团队氧化铝栅介质存储器研究获新发现本期为大家介绍的是西电宽带隙半导体国家重点实验室郝跃院士团队在非易失性存储器领域的研究成果,主要内容为团队针对基于非晶态氧化铝栅介质层的非挥发性晶体管进行的多种电特性与存储特性……慢查询MySQL定位优化技巧,从10s优化到300ms文章目录如何定位并优化慢查询SQL?如何使用慢查询日志?慢查询例子演示,新手都能看懂查询语句慢怎么办?explain带你分析sql执行计划当主键索引、唯一索引、普通索引都存在,……美国一家催收新秀,把讨债变销售,客户主动送钱来源丨创业邦(ID:ichuangyebang)作者丨王艺编辑丨海腰题图丨图虫创意催收行业,本质上是一个劳动密集型行业,高度依赖人工,效率并不高,急需数……
将前端开发的网页封装成手机app紫晃星的简介紫晃星的养殖方法温网纳达尔冲18连胜,4号种子恐出局!NO。115或延续黑马网鱼网咖母公司推出VR头显新品,4999元的设备会有人买单吗蚂蚁汪小菲事件发酵,迪丽热巴鹿晗绯闻再被搬上台面,女方态度很明确男人醉酒不仅伤肝还会伤心产后减肥的小秘方面颊造句用面颊造句大全国产5GSOC,部分成绩超出麒麟980,你能接受吗?这段木头里一定有虫复合每股收益年增长20,苹果投资者过去5年获得了253回报
情感驿站你留给我的悲伤欢喜和感怀一模一样的反义词(半信半疑的反义词)最新迎接六一儿童节口号清梦造句用清梦造句大全钻头除锈的方法热评聚热点网 非法处置进口的固体废物罪既遂的处罚标准是什么?波粒二象性是粒子的本质吗?为什么测量行为会导致量子叠加态坍缩关于郑义门的漫画观后感3篇爸爸的英语是什么爸爸的英语是啥搞基是什么意思?热闻聚热点网 第一次说我爱你婴儿的照顾最好不假手与人,不要忘了父母是责任人

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州