随笔分类 - mysql sql优化
摘要:零 背景: ibtmp1暴涨.需要汇总用到ibtmp1原因 一 查询操作类型 1 group by (8.0之前默认排序,如需避免需要加order by null) 2 group by a order by b 3 order by b 4 union 5 select a from (selec
阅读全文
摘要:mysql慢日志详解 一 参数 slow_query_log 是否打开慢日志 默认为1 slow_query_log_file 设置慢日志的具体路径和文件 默认为 datadir/slow.log long_query_time 语句执行时间记录阈值,默认1S min_examined_row_li
阅读全文
摘要:一 简介:聊聊group by的分组二 explain体现 extra下 1 using tempoary 2 using tempoary && using filesort 3 using filesort 4 none三 实现方式 1 定义 GROUP BY 实际上也同样会进行排序操作,而且与
阅读全文
摘要:mysql优化基础之参数调节一 简介:我们谈谈如何调节mysql参数加速查询二 相关参数 1 排序参数 sort_buffer_size 当出现order by时会利用到这个参数,当数据量超过内存参数时,会利用磁盘的临时文件进行外部排序. 知识点补充: 1 联合索引的建立是按照最左原则,即首先按照第
阅读全文
摘要:一 简介:mysql分区表查询相关二 具体 1 查看计划树 explain PARTITIONS sql 分析分区表执行计划 2 影响因素 1 查询性能方面,如果按照分区键查询,分区表比非分区表的性能要好20%,而且数据量越大性能差距越大; 2 如果按照非分区键的索引查询,非分区表的性能表现更好,因
阅读全文
摘要:一 简介:在之前我们从基础可知,现在咱们聊一下改写的几种思路二 分类: 1 left join 2 inner join 3 right join三 具体改写思路:思路1 本身不包含子查询,将多表查询的条件拆分成多个select子查询然后再进行关联思路2 本身涉及到分组,增加order by nul
阅读全文
摘要:一 什么是驱动表 1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表]; 2)未指定联接条件时,行数少的表为[驱动表](Important!)。 表现 explain第一行出现的就是驱动表二 多表查询的分类 1 多表join查询 2 多表join+子查询三 驱动表的分类 1 单表 单表执行
阅读全文
摘要:一 简介:今天咱们来聊聊mysql的查询总数 二 具体介绍 1 从引擎层面说 myisam myisam的扫描总行数是非常快的,这是因为myisam会将表的总行数存储起来,定期维护,但是注意,一旦加入where条件,这个优势就会消失 innodb innodb 的扫描总行数随着数据量的增大越来越慢,
阅读全文
摘要:一 explain 1 扫描行数根据的是表的统计元数据 2 索引的元数据具体指的就是show index from查到的索引的区分度,索引的区分度越高越好 3 表的元数据是定期收集,所以可能不准确 4 如果感觉explain不准确,可以用analyze table t命令重新收集 5 元数据不准确的
阅读全文
摘要:一 简介:利用profile分析慢语句的过程有助于我们进行语句的优化 二 执行过程 set profiling=1; set profiling=0; 2 执行sql 3 查看过程消耗 三 结果 1 查看执行过程耗时 SHOW profile FOR query 1 checking permiss
阅读全文
摘要:一 简介:今天咱们来聊聊explain的select_type 二 类型 (1)SIMPLE 简单的SELECT语句(不包括UNION操作或子查询操作) (2)PRIMARY/UNION PRIMARY:查询中最外层的SELECT(如两表做UNION或者存在子查询的外层的表操作为PRIMARY,内层
阅读全文
摘要:一 简介:今天咱们来聊聊explain中type的相关解读 二 类型: system: 表中只有一条数据. 这个类型是特殊的 const 类型. const: 针对主键或唯一索引的等值查询扫描, 最多只返回一行数据. const 查询速度非常快, 因为它仅仅读取一次即可 eq_ref: 此类型通常出
阅读全文
摘要:一 简介:今天咱们来聊聊mysql的分页查询 二 基本逻辑 limit深分页,导致SQL变慢原因有两个: limit语句会先扫描offset+n行,然后再丢弃掉前offset行,返回后n行数据。也就是说limit 100000,10,就会扫描100010行,而limit 0,10,只扫描10行 li
阅读全文
摘要:一 简介:此文章为经历过的sql案例集合和相关思路 二 案例1: 现象: 测试环境出现select语句,join2张表多次join,explain结果如下 出现 using where,using join buffer (Block Nested Loop) 思路分析:BNL 5.6优化,首先就看
阅读全文
摘要:一 explain 常用状态 1 using filesort 常见于order by 字段 无法走索引造成,文件排序。需要注意优化,复杂条件可以选择建立联合索引进行优化2 using join buffer size 常见于join连接,并且连接字段无法走索引时造成,缓存存储记录,BML优化,需要
阅读全文
摘要:一简介:参考了几位师兄,尤其是M哥大神的博客,让我恍然大悟,赶紧记录下二 原理: mysql的三种算法 1 Simple Nested-Loop Join 将驱动表/外部表的结果集作为循环基础数据,然后循环从该结果集每次一条获取数据作为下一个表的过滤条件查询数据,然后合并结果。如果有多表join,则
阅读全文
摘要:一 简介:今天我们来探讨下SQL语句的优化基础 二 基础规则: 一 通用: 1 避免索引字段使用函数 2 避免发生隐式转换 3 order by字段需要走索引,否则会发生filesort 4 当需要得到的数据量占用表的数据量很大比例的时候,数据库可能不会采用索引而选择全表扫描 5 复合索引要注意最左
阅读全文