mysql优化-Explain工具介绍
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工具介绍相关推荐
- MySQL的explain工具介绍
文章目录 介绍 explain extended show warings explain partitions id 字段 select_type type key possible_keys ke ...
- MySQL 优化 —— EXPLAIN 执行计划详解
引言 本博客大部分内容翻译自MySQL 官网 Understanding the Query Execution Plan 专题.另外有一些补充,则来自于网课以及<高性能MySQL(第三版)&g ...
- 一、MySql优化的基础介绍
一.为什么要学习MySql优化 1.避免网站页面出现访问错误 2.增加数据库的稳定性 3.优化用户的体验 二.查询过慢的原因 1.有规律速度过慢:可能用户访问量激增 , 可以使用mysql集群处 ...
- MySQL管理常用工具介绍
1.mysql 该mysql不是指mysql服务,而是指mysql的客户端工具. -e选项可以在Mysql客户端执行SQL语句,而不用连接到MySQL数据库再执行,对于一些批处理脚本, 这种方式尤其 ...
- MySql优化神器 Explain工具介绍
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析查询语句或是结构的性能瓶颈.在select语句之前增加explaion关键字,MySQL会在查询上设置一个标记,执行查询会返回执行计划的信息, ...
- 转 MySQL问题排查工具介绍
原文链接: http://mrchenatu.com/2017/03/24/mysql-tool/ 本总结来自美团内部分享,屏蔽了内部数据与工具 知识准备 索引 索引是存储引擎用于快速找到记录的一种数 ...
- MySQL优化——Explain分析执行计划详解
文章目录 前言 一. 查看SQL执行频率 二. 定位低效率执行SQL 三. explain分析执行计划 3.1 id 3.2 select_type 3.3 table 3.4 type 3.5 ke ...
- Android性能优化的工具介绍
最近对项目的性能进行测试优化,现在刚好有时间对内存泄漏整理下 什么是内存泄漏 Android 虚拟机的垃圾回收采用的是根搜索算法.GC会从根节点(GC Roots)开始对heap进行遍历.到最后,部分 ...
- MySql索引优化及Explain工具使用
更多内容请浏览本人博客 explain 工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,My ...
- MySQL:常用的MySQL优化工具
影响数据库性能的常见因素如下: (1)磁盘IO: (2)网卡流量: (3)服务器硬件: (4)SQL查询速度. 下面介绍几个mysql 优化的工具,可以使用它们对MySQL进行检查,生成awr报告,从 ...
最新文章
- swift_019(Swift 的类)
- 清华「计图」现在支持国产芯片了!动态图推理比PyTorch快了270倍
- 口语学习Day7:今天聊聊美国超市的物价
- ASP.NET jQuery 随笔 在TextBox里面阻止复制、剪切和粘贴事件
- android升级功能键,Android 按键添加转载
- 线性回归与梯度下降法
- windows连接远程Hadoop/Spark
- linux传奇源码,游戏源码 屠龙传奇H5 鲲乃异兽 全套源码+教程
- python中的order_Hive中Order by和Sort by的区别是什么?
- linux usb键盘驱动详解
- 因涉及微信小游戏“欢乐斗地主”不正当竞争纠纷 腾讯获途游游戏赔偿56万元...
- Ancient Messages UVA - 1103
- python定义一个数列_第二章 数列和序列类型
- mysql 分页_MySQL 如何优化大分页查询?
- 设计模式(六) : 创建型模式--原型模式
- 【软件测试学习笔记】黑盒测试方法及案例
- 复旦大学《高等代数学(第三版)》教材勘误表
- 乐视盒子UI 官方下载地址
- 完整的Java软件开发学习路线
- AI创作现状与未来发展浅析