explain可以模拟优化区,分析查询语句的性能瓶颈。
加上该关键字都只是返回了执行计划的信息,而不是执行SQL语句,当然子查询还是会执行。

explain中的关键列作出以下解释

1.ID:查询语句的编号,编号越大,执行的优先级越高,相同编号大小自上而下执行

2.select_type:查询的的复杂度;
有以下几个类型:simple 简单的查询,没有子查询和union

                             derived:from后的子查询,mysql将其生成一个临时表(优先级最高)        subquery:from前的子查询,也就是查询字段(优先级次之)primary:复杂的查询当中,最外层的select查询语句

3.table:访问哪一张表

4.type:很重要,表示该查询将如何去查找数据,次高到低的顺序
const,system:就像是在差一个常量或者只有一条数据一样那么丝滑。用于primarykey或uniquekey一条记录 :select*fromfilmwhereid=1

eq_ref:关联查询时,用primarykey或uniquekey作为关联条件,

ref:相比eq_ref,不适用主键或唯一键,使用不同的二级索引作为条件。

range:范围扫描通常出现在in(),between,>,<,>=等操作中。使用一个索引来检索给定范围的行。

index:扫描全索引就能拿到结果,一般是扫描某个二级索引,这种扫描不会从索引树根节点开始快速查找,而是直接对二级索引的叶子节点遍历和扫描,速度还是比较慢的,这种查询一般为使用覆盖索引,二级索引一般比较小,所以这种通常比ALL快一些。 >explain select * from film;
ALL:即全表扫描,扫描你的聚簇索引的所有叶子节点。通常情况下这需要增加索引来进行优化了。explain select * from actor;

5.possible_keys列这一列显示查询可能使用哪些索引来查找。

6.key列这一列显示mysql实际采用哪个索引来优化对该表的访问。

索引优化:
1.一直都说最左前缀原则,不仅仅在where后要遵守,order by ,group by 都要遵守
2.很多时候我们业务系统实现分页功能可能会用如下sql实现select * from employees limit 10000,10;表示从表employees中取出从10001行开始的10行记录。看似只查询了10条记录,实际这条SQL是先读取10010条记录,然后抛弃前10000条记录,然后读到后面10条想要的数据。因此要查询一张大表比较靠后的数据,执行效率是非常低的。
有些时候我们通过inner join 优化,可以优化查询
select * frome mployeese edone inner join (select id frome mployees ed order by name limit 90000,5) edone.id=ed.id;
如果你直接查询select * frome mployees order by name limit 90000,5,虽然name有索引,但是可能数据太多,回表查询会带来很大新能消耗,我们就可以选择,先把他的id查出来这里的临时表会用到索引name,而且最主要的是,最外层左边会用到主键id索引。
3.in和exists优化原则:小表驱动大表,即小的数据集驱动大的数据集in:当B表的数据集小于A表的数据集时,in优于exists
当A表的数据集小于B表的数据集时,exists优于in将主查询A的数据,放到子查询B中做条件验证,根据验证结果(true或false)来决定主查询的数据是否保留
4.1、查询mysql自己维护的总行数对于myisam存储引擎的表做不带where条件的count查询性能是很高的,因为myisam存储引擎的表的总行数会被mysql存储在磁盘上,查询不需要计算

下面链接是锁机制https://mind.airmore.cn/doc/93a3370167
锁详解
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。
锁分类
从性能上分为乐观锁(用版本对比来实现)和悲观锁
从对数据库操作的类型分,分为读锁和写锁(都属于悲观锁)读锁(共享锁,S锁(Shared)):针对同一份数据,多个读操作可以同时进行而不会互相影响写锁(排它锁,X锁(eXclusive)):当前写操作没有完成前,它会阻断其他写锁和读锁
从对数据操作的粒度分,分为表锁和行锁表锁每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;一般用在整表数据迁移的场景。

表锁
每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;一般用在整表数据迁移的场景。

行锁
每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度最高。InnoDB与MYISAM的最大不同有两点:InnoDB支持事务(TRANSACTION)InnoDB支持行级

总结:MyISAM在执行查询语句SELECT前,会自动给涉及的所有表加读锁,在执行update、insert、delete操作会自动给涉及的表加写锁。InnoDB在执行查询语句SELECT时(非串行隔离级别),不会加锁。但是update、insert、delete操作会加行锁。简而言之,就是读锁会阻塞写,但是不会阻塞读。而写锁则会把读和写都阻塞。

锁优化建议
尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁
合理设计索引,尽量缩小锁的范围尽可能减少检索条件范围,避免间隙锁
尽量控制事务大小,减少锁定资源量和时间长度,涉及事务加锁的sql尽量放在事务最后执行
尽可能低级别事务隔离

mysql优化-Explain工具介绍相关推荐

  1. MySQL的explain工具介绍

    文章目录 介绍 explain extended show warings explain partitions id 字段 select_type type key possible_keys ke ...

  2. MySQL 优化 —— EXPLAIN 执行计划详解

    引言 本博客大部分内容翻译自MySQL 官网 Understanding the Query Execution Plan 专题.另外有一些补充,则来自于网课以及<高性能MySQL(第三版)&g ...

  3. 一、MySql优化的基础介绍

    一.为什么要学习MySql优化 1.避免网站页面出现访问错误 2.增加数据库的稳定性 3.优化用户的体验 二.查询过慢的原因    1.有规律速度过慢:可能用户访问量激增 , 可以使用mysql集群处 ...

  4. MySQL管理常用工具介绍

    1.mysql 该mysql不是指mysql服务,而是指mysql的客户端工具.  -e选项可以在Mysql客户端执行SQL语句,而不用连接到MySQL数据库再执行,对于一些批处理脚本, 这种方式尤其 ...

  5. MySql优化神器 Explain工具介绍

    使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析查询语句或是结构的性能瓶颈.在select语句之前增加explaion关键字,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息, ...

  6. 转 MySQL问题排查工具介绍

    原文链接: http://mrchenatu.com/2017/03/24/mysql-tool/ 本总结来自美团内部分享,屏蔽了内部数据与工具 知识准备 索引 索引是存储引擎用于快速找到记录的一种数 ...

  7. MySQL优化——Explain分析执行计划详解

    文章目录 前言 一. 查看SQL执行频率 二. 定位低效率执行SQL 三. explain分析执行计划 3.1 id 3.2 select_type 3.3 table 3.4 type 3.5 ke ...

  8. Android性能优化的工具介绍

    最近对项目的性能进行测试优化,现在刚好有时间对内存泄漏整理下 什么是内存泄漏 Android 虚拟机的垃圾回收采用的是根搜索算法.GC会从根节点(GC Roots)开始对heap进行遍历.到最后,部分 ...

  9. MySql索引优化及Explain工具使用

    更多内容请浏览本人博客 explain 工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,My ...

  10. MySQL:常用的MySQL优化工具

    影响数据库性能的常见因素如下: (1)磁盘IO: (2)网卡流量: (3)服务器硬件: (4)SQL查询速度. 下面介绍几个mysql 优化的工具,可以使用它们对MySQL进行检查,生成awr报告,从 ...

最新文章

  1. swift_019(Swift 的类)
  2. 清华「计图」现在支持国产芯片了!动态图推理比PyTorch快了270倍
  3. 口语学习Day7:今天聊聊美国超市的物价
  4. ASP.NET jQuery 随笔 在TextBox里面阻止复制、剪切和粘贴事件
  5. android升级功能键,Android 按键添加转载
  6. 线性回归与梯度下降法
  7. windows连接远程Hadoop/Spark
  8. linux传奇源码,游戏源码 屠龙传奇H5 鲲乃异兽 全套源码+教程
  9. python中的order_Hive中Order by和Sort by的区别是什么?
  10. linux usb键盘驱动详解
  11. 因涉及微信小游戏“欢乐斗地主”不正当竞争纠纷 腾讯获途游游戏赔偿56万元...
  12. Ancient Messages UVA - 1103
  13. python定义一个数列_第二章 数列和序列类型
  14. mysql 分页_MySQL 如何优化大分页查询?
  15. 设计模式(六) : 创建型模式--原型模式
  16. 【软件测试学习笔记】黑盒测试方法及案例
  17. 复旦大学《高等代数学(第三版)》教材勘误表
  18. 乐视盒子UI 官方下载地址
  19. 完整的Java软件开发学习路线
  20. AI创作现状与未来发展浅析

热门文章

  1. iphone13 Pro的运行内存是6gb
  2. CycleGAN的测试
  3. 防风雨密封胶的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  4. HDS设备高级操作_VSP_更换Cache电池手册
  5. android热修复原理总结
  6. 好好说说互联网IT行业加班那点儿事
  7. Android 高德地图自定义定位图标的显示
  8. 【转】布同:如何循序渐进学习Python语言
  9. android intent传文件夹,Android之intent传值篇
  10. 宝宝湿疹怎么办?宝宝湿疹怎么处理最好?