前端时间跟一个DB相关的项目,alanc反馈有一个查询,使用索引比不使用索引慢很多倍,有点毁三观。所以跟进了一下,用explain,看了看2个查询不同的结果。 不用索引的查询的时候结果如下,实际查询中速度比较块。 mysql> explain select * from ...
前言 又和大家见面了 又两周过去了,我的云笔记里又多了几篇写了一半的文章草稿。有的是因为质量没有达到预期还准备再加点内容,有的则完全是一个灵感而已,内容完全木有。羡慕很多大佬们,一周能产出五六篇文章,给我两个肝我都不够。好了,不多说废话了... 最近在线上环境遇到了一次SQL慢查询引发的数据库故障,影响线上业务。经过排查后,确定原因是SQL在执行时,MySQL优化器选择了错误的索引 不应该说是 ...
2020-07-30 20:39 1 813 推荐指数:
前端时间跟一个DB相关的项目,alanc反馈有一个查询,使用索引比不使用索引慢很多倍,有点毁三观。所以跟进了一下,用explain,看了看2个查询不同的结果。 不用索引的查询的时候结果如下,实际查询中速度比较块。 mysql> explain select * from ...
MySQL 中,可以为某张表指定多个索引,但在语句具体执行时,选用哪个索引是由 MySQL 中执行器确定的。那么执行器选择索引的原则是什么,以及会不会出现选错索引的情况呢? 先看这样一个例子: 创建表 Y,设置两个普通索引, 创建一个存储过程用于插入数据。 MySQL: 5.7.27 ...
1、基本概念 在MySQL中一张表其实是可以支持多个索引的。但是,你写SQL语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由MySQL来确定的。 一般在数据库使用的时候回遇到这样的问题,一条本来可以执行很快的语句,却由于MySQL选错了索引,导致执行 ...
背景 最近一个后台功能列表,业务人员反馈查询和导出速度非常慢。 通过定位发现列表查询和数据导出都是使用的同样的一个连表查询SQL。 这个功能刚上线不久,起初查询和导出速度都是蛮快的,把这个SQL放到测试环境也是挺快的。 对比了一下测试环境和生产环境相关表结构都是一样的,之后我们把目光放在 ...
结论:添加索引时,如果有对该表的慢查询,会导致索引添加延时等待 添加索引语句:alter table tb_name add index idx_xx(col_name); 执行添加索引的SQL: 通过show processlist; 发现有锁 ...
mysql 查询所有碎片语句 SHOW TABLE STATUS LIKE 'logs' ---------logs是带有索引的表名称 如果Data_free大于0 表示有索引碎片产生 可以使用如下语句清理碎片 OPTIMIZE TABLE `logs` -------logs ...
前面我们介绍过索引,你已经知道了在MySQL中一张表其实是可以支持多个索引的。但是,你写SQL语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由MySQL来确定的。 不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于MySQL选错了索引,而导致执行速度变得 ...
最近查看慢查询日志,一直有看到SELECT * FROM tb_name的SQL语句,在之前SQL审核的时候,也没发现有这些SQL的存在,所以很好奇这里怎么出现的,后来用了vc-mysql-sniffer脚本去抓SQL来分析,也没有找出SELECT * 之类的SQL,下面我上图让分析一下 ...