TreeMind树图在线AI思维导图
笔灵Logo笔灵AI论文写作三步搞定,GO>>
当前位置:树图思维导图模板IT互联网互联网干货互联网MYSQL 优化思维导图

互联网MYSQL 优化思维导图

  收藏
  分享
免费下载
免费使用文件
树图周树人 浏览量:122022-11-08 20:50:25
已被使用0次
查看详情互联网MYSQL 优化思维导图

简单介绍MYSQL 优化的内容

树图思维导图提供 互联网MYSQL 优化思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 互联网MYSQL 优化思维导图  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:22b3656410c9c64a0d8756862504bb2d

思维导图大纲

MYSQL 优化思维导图模板大纲

explain关键字

能干嘛

表的读取顺序

数据读取操作的操作类型

哪些索引可以使用

哪些索引被实际使用

表之间的引用

每张表有多少行被优化器查询

怎么玩

Explain + SQL语句

执行计划包含的信息

索引优化

索引分析

两表

左连接加右表索引,右联接加左索引

三表

尽可能减少join语句中的NestedLoop的循环次数:“永远用小的结果集驱动大的结果集”;                                                                                                        优先优化NestedLoop的内层循环;                                                                   保证Join语句中被驱动表Join条件字段已经被索引;                                           当无法保证驱动表的Join条件字段被索引且内存资源充足的前提下,不要太吝啬JoinBuffer的设置;

单表

范围查找右边索引字段失效,可以绕过范围字段,只在其他字段建索引

索引失效(应该避免)

最左匹配原则,中间不能断

不要在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描

范围查询之后全失效(存储引擎不能使用索引中范围条件右边的列)

尽量使用覆盖索引(只访问索引的查询)减少select *

在使用不等于(!=或者 <>)的时候无法使用索引会导致全表扫描

is null,is not null 也无法使用索引

like以通配开头(%abc)mysql索引失效会变成全表扫描的操作

字符串不加单引号索引失效

少用or,用它来连接时会索引失效

varchar类型不能失去单引号

in关键字 在后面数据量大于30%时不走索引,走全表扫描

一般性建议

优化口诀

全值匹配我最爱,最左前缀要遵守

带头大哥不能死,中间兄弟不能断 索引列上少计算,范围之后全失效 like百分写最右,覆盖索引不写星

查询截取分析

查询优化

order by关键字优化

order by子句,尽量使用Index方式排序,避免使用FileSort方式排序

Order By 满足两种情况,会使用Index方式排序

Order by 语句使用索引最左前列

使用Where子句与Order By 子句条件列组合满足索引最左前列

如果不在索引列上,filesort有两种算法:双路排序和单路排序

单路性能好,但是如果sort_buff容量不够,会造成多次读取,所以需要优化

优化策略

增大sort

增大max

group by关键字优化

先排序后分组,按照最左匹配原则

无法使用索引时,增大max

where高于having,能写在where的条件就不要写在having中

表空间优化

如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,表的空间会出现很多碎片;  删除时留白, 插入时尝试使用留白空间 (当删除后并未将所有留空的都插入数据,既可以认为未被立即使用的留空就是碎片)

注意事项

命令执行时会锁表,所以如果表数据量较大或碎片较多时,谨慎执行

优化方式

使用 OPTIMIZE TABLE tbl_name命令 定期优化表,这个要依据表的数据情况定时间

永远小表驱动大表

当B表的数据集必须小于A表的数据集时,用in优于exists

当A表数据集小于B表数据集时,用exists优于in                                                  select ... from table where EXISTS (subquery) 该语法可以理解为,将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE或FALSE来决定主查询的数据结果是否得以保留)

1.EXISTS(subquery)只返回True或false,因此子查询中的select*也可以是SELECT 1或select,官方说法是实际执行时会忽略SELECT清单,因此没有区别

2.EXISTS子查询的实际执行过程可能经过了优化而不是我们理解上的逐条对比,如果担忧效率问题,可进行实际检验以确定是否有效率问题。

慢查询日志

慢查询日志几率运行时间超过long

查看和开启

开启

set global slow

永久生效

设置配置文件my.cnf show

默认时间

show variables like 'long

日志过滤

子主题1

默认

SHOW VARIABLES LIKE '%slow

mysql默认没有开启漫查询日志

如果不是调优需求,一般不建议启动该参数

批量数据脚本

Show Profile

开启

默认是关闭的,开启语句“set profiling = 1;”

查询语句

SHOW PROFILES ;

SHOW PROFILE FOR QUERY #{id};

作用

了解SQL执行的线程的状态及消耗的时间

全局查询日志

概括思维导图模板大纲

相关思维导图模板

工艺流程图思维导图

树图思维导图提供 工艺流程图 在线思维导图免费制作,点击“编辑”按钮,可对 工艺流程图  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:a8e31ea83041e28a9ece5f7d7121fc30

《数字教育平台开发项目策划》思维导图

树图思维导图提供 《数字教育平台开发项目策划》 在线思维导图免费制作,点击“编辑”按钮,可对 《数字教育平台开发项目策划》  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:d6437326e3e07ecf1e5e178ba84d0100