MySQL 执行计划中的 key_len 表示什么

我们在使用MySQL中的 explain 命令查看执行计划中,往往能看到key_len 这个指标。 使用复合索引时,通过key_len 的值能判定SQL使用了索引中的哪些字段。

长度计算方法 1.字符集 字符集不同,字符占据的字节长度也不同。 字符集 字节长度 gbk 1个字符占2个字节 utf8 1个字符占3个字节 utf8mb4

Read more

MySQL order by + limit bug 触发原因及解决办法

问题描述 下面这个SQL,应该走where的索引 idx_iv_pid,包含 id_value 、parent_id 两列。 但是,走的是排序列 add_time的索引add_time_idx。从而SQL执行速度慢。 但是,但是! add_time_idx 并不在“possible_keys”里。

SQL真实执行时间为 1202ms

Read more

MySQL 减少从库延迟的方法

从库延迟有两方面原因: 1、IO thread慢,主要是因为网络带宽不足。 在主从库开启启压缩参数slave_compressed_protocol减少压力。网上查看实验数据,压缩率大概是1/4(开启压缩7.14MB/s,不开启则是23.76MB/s) 如果CPU压力已经很大不建议开启压缩参数,毕竟压缩要消耗大量CPU资源。 2、 SQL thread慢。 SQL thread负责读取relay

Read more

MySQL 不能用create table as select 的原因

1、新表不会自动创建创建和原表相同的索引。 2、一个事务中混合了事务和非事务语句。它会提交当前和未完成的事务。 例如,该例子中,第2个update未执行成功,会导致第1个update回滚,但是其中的CTAS语句为DDL操作,无法回滚。 解决办法:使用临时表create temporary table ,退出会话后临时表自动删除。 begin; update accounts set amount

Read more

order by + limit 改写优化

order by +limit 常用于分页功能。本案例中,用ID列进行排序,除了查询ID列外,还查询了value和stuffing列。这种情况容易出现性能问题或者不是性能最优的SQL写法。

测试中发现,如果t_limit为MySIAM。很容易出现性能问题,执行计划走全表扫描不走索引。 现在几乎不用MySIAM,所以本文测试结果基于I

Read more

MySQL慢查询日志 – Slow Query Log

The Slow Query Log,也就是MySQL的慢查询日志,其记录了执行时间超过设定值的SQL,也可以记录不使用索引的SQL语句。慢查询日志,能够帮助DBA快速锁定性能异常的SQL语句,然后进行优化工作,以保障MySQL数据库的正常运行。 慢查询日志记录了两部分SQL: 1、SQL查询时间超过变量 long_query_time 设定值,默认10秒。 2、SQL返回行数大于 min_exa

Read more

mysqldumpslow – 读懂MySQL慢查询日志

一、慢查询日志介绍 MySQL中,SQL的执行效率直接影响了MySQL的性能。为了便于DBA及时发现并处理有性能异常的SQL,MySQL专门设立了慢查询日志(slow query log)。SQL执行时间大于long_query_time设定的时候,MySQL就会将这条SQL记录到慢查询日志中。 MySQL慢查询日志既可以保存成文件,又可以保存在MySQL的表中。由于保存在表中,会给数据库带来额外

Read more