首页
学习
活动
专区
圈层
工具
发布

性能分析之单条SQL查询案例分析(mysql)

引言 在性能分析之SQL性能分析(mysql)文中,全面介绍了 MySQL 常见的性能分析工具。本文将以一个案例详细展开介绍如何针对单条SQL进行性能分析。...背景 在定位到需要优化的单条查询SQL后,我们可以针对此查询“钻取”更多信息,分析为什么会花费怎么长的时间执行,以及如何去优化的大致方向。...可以看到,EXPLAIN 命令的结果一共有以下几列: id: SELECT 查询的标识符....) eq_ref(通过主键或唯一索引访问,最多只会有一条结果) const(读常量,只需读一次) system(系统表,表中只有一条数据) null(速度最快) possible_keys: 此次查询中可能选用的索引...接下来我们执行一条查询命令 ? 在开启了 QueryProfiler 功能之后,MySQL 就会自动记录所有执行的 Query 的 Profiling 信息。

1.7K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【高性能MySQL】性能分析之剖析单条查询SHOW PROFILE

    在定位到需要优化的单条查询后,确认为什么花费这么长时间执行,以及需要如何去优化。本节主要介绍如何方便的测量查询执行的各部分花费了多少时间,有了这些数据才能决定采用何种优化技术。...使用SHOW PROFILESHOW PROFILE命令是在MySQL5.1以后的版本中引入的,默认是禁用的,可以通过服务器变量在会话级别动态地修改。...查看是否开启:SHOW VARIABLES LIKE 'profiling';使用下面命令开启:SET profiling=1;然后,在服务器上执行的所有语句,都会测量其耗费的时间和其他一些查询执行状态变更相关的数据...当一条查询提交给服务器时,此工具会记录剖析信息到一张临时表,并且给查询赋予一个从1开始的整数标识符。...--------------+| Query_ID | Duration | Query |+----------+------------+------

    67720

    MySQL单标查询

    一 单表查询的语法 查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据。...下面是完整的一个单表查询的语法 select * from,这个select * 指的是要查询所有字段的数据。 SELECT distinct 字段1,字段2......employee表,找到这个表之后,mysql会拿着where后面的约束条件去表里面找符合条件的数据,然后遍历你表中所有的数据,查看一下id是否大于7,逐条的对比,然后只要发现id比7大的,它就会把这一整条记录给...select要先执行的,所以你先将表employee起了个新名字叫做tb1,然后在tb1里面取查询数据,那么tb1里面找不到employee.id这个字段,就会报错,如果我们查询的时候不带表名,你as来起一个新的表名也是没问题的...5条 SELECT * FROM employee ORDER BY salary DESC LIMIT 5,5; #从第5开始,即先查询出第6条,然后包含这一条在内往后查5

    3.2K20

    MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据

    开发背景:   最近在做一个批量数据导入到MySQL数据库的功能,从批量导入就可以知道,这样的数据在插入数据库之前是不会进行重复判断的,因此只有在全部数据导入进去以后在执行一条语句进行删除,保证数据唯一性...操作: 使用SQL语句查询重复的数据有哪些: SELECT * from brand WHERE brandName IN( select brandName from brand GROUP BY brandName...HAVING COUNT(brandName)>1 #条件是数量大于1的重复数据 ) 使用SQL删除多余的重复数据,并保留Id最小的一条唯一数据: 注意点: 错误SQL:DELETE FROM brand...Id FROM (SELECT MIN(Id) AS Id FROM brand GROUP BY brandName HAVING COUNT(brandName)>1) t) #查询显示重复的数据都是显示最前面的几条...,因此不需要查询是否最小值 更加简单快捷的方式: 这是老飞飞的前辈给了一个更加方便,简洁的写法(非常感谢大佬的方法): DELETE FROM brand WHERE Id NOT IN (SELECT

    4.6K20

    MySQL之单表查询、多表查询

    一、单表查询: 单个表的查询方法及语法顺序需要通过实际例子来熟悉 先将表数据创建下: ? ?...找到数据形成虚拟表 ②、where约束条件的使用 # 1.查询id大于等于3小于等于6的数据 mysql> select * from emp where id >= 3 and id...egon | male | | 14 | 张野 | male | | 9 | 歪歪 | female | +----+--------+--------+ 可以看出以上按部门分组取出的数据都是能找到的部门分组数据的第一条...,这样做肯定是不合理的,因为我只是要查询分组的数据,你给我每个分组的第一条id的数据有何用。...,虽然不合理但是其中有合理的数据,现在我们需要做的就是找出合理的数据 # 查询员工及所在部门的信息 mysql> select dep.name,emp.name from emp,dep where

    24.9K30

    mysql-单表查询

    语法: 一、单表查询的语法    SELECT 字段1,字段2... ...%小时任意多字符,_表示一个字符 5.逻辑运算符:在多个条件直接可以使用逻辑运算符 and or not 验证结果:where条件约束 1 :单条件查询 mysql> select id,name from...大前提:     可以按照任意字段分组,但是分组完毕后,比如group by post,只能查看post字段,如果想查看组内信息,需要借助     于聚合函数 当执行以下sql语句的时候,是以post字段查询了组中的第一条数据...,然后包含这一条在内往后查5条     SELECT * FROM employee ORDER BY salary DESC         LIMIT 5,5; #从第5开始,即先查询出第6条,然后包含这一条在内往后查...5条 小练习: 分页显示,每页5条 第一页数据 mysql> select * from  employee limit 0,5; +----+----------+------+-----+-----

    6.2K20

    MySQL单表查询详细解析

    一、关键字的执行优先级   1,from:找到表   2,where:拿着where指定的约束条件,去文件/表中取出一条条数据   3,group by:将取出的一条条数据进行分组,如果没有group...100   3,in(80,90,100)   4,like 'ee%' 模糊匹配,%表示任意多字符,_表示一个字符   5,逻辑运算符:在多个条件直接可以用逻辑运算符 and or not #1:单条件查询...每个人都有唯一的id号,我count是计算一下分组之后每组有多少的id记录,通过这个id记录我就知道每个组有多少人了 关于集合函数,mysql提供了以下几种聚合函数:count、max、min、avg、...limit select * from t1 order by salary limit 3;  #默认起始位为0,即从第一条数据开始,总共显示3条数据 select * from t1 order...#起始位为2,即从第三条开始,总共显示6条数据 八、使用正则表达式查询 之前用的like是模糊匹配,只有%和_,具有局限性,查询的时候其实可以用我们之前学正则 select * from t1 where

    3.6K11

    MySQL 之单表查询(精简笔记)

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。...MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统)...《MySQL5.7从入门到精通》 - 刘增杰 数据库管理系统的一个最重要的功能就是数据查询,数据查询不应只是简单查询数据库中存储的数据,还应该根据需要对数据进行筛选,以及确定数据以什么样的格式显示....MySQL提供了功能强大、灵活的语句来实现这些操作,下面将介绍如何使用SELECT语句查询数据表中的一列或多列数据、使用集合函数显示查询结果....有时候我们并不需要返回实际表中的数据,而只是对数据进行总结.MySQL提供一些查询功能,可以对获取的数据进行分析和报告,这些函数的功能有:计算数据表中记录行数的总数、计算某个字段列下数据的总和,以及计算表中某个字段下的最大值

    5.6K10

    MySQL自增id超大问题查询 转

    问题排查 这张表是一个简单的接口服务在使用,每天大数据会统计一大批信息,然后推送给小A,小A将信息更新到数据库中,如果是新数据就插入,旧数据就更新之前的数据,对外接口就只有查询了。...小A又仔细观察了这1000多万已有的数据,将插入时间、id作为主要观察字段,很快,发现了个问题,每天第一条插入的数据总是比前一天多1000多万,有时候递增的多,有时候递增的少,小A又将矛头指向了DBA小...查了资料之后,小A得知,原来,mysql主键自增有个参数innodb_autoinc_lock_mode,他有三种可能只0,1,2,mysql5.1之后加入的,默认值是1,之前的版本可以看做都是0。...上面的例子执行完之后表的下一个自增id是10,你理解对了吗,因为最后一条执行的是一个Mixed-mode inserts语句,innoDB会分析语句,然后分配三个id,此时下一个id就是10了,但分配的三个...因为可能有一个复杂插入,还在执行呢,另外一个插入就来了,恢复的时候是一条条来执行的,就不能重现这种并发问题,导致记录id可能对不上。

    6.3K20

    python数据库-MySQL单表查询基本操作(50)

    一、条件查询 1、查询的基本语法 select * from 表名; from关键字后面写表名,表示数据来源于是这张表 select后面写表中的列名,如果是*表示在结果中显示表中所有列 在select后面的列名部分...=或 4.1、查询表中全部数据(这个表是我提前创建好的) mysql> select *from hero; +------+-----------+--------------+---------...in表示在一个非连续的范围内 例如:查找h_id为1、3、5的英雄 mysql> select *from hero where h_id in(1,3,5); +------+-----------...--+ | 900.0000 | +---------------+ 六、分组查找 按照字段分组,表示此字段相同的数据会被放到一个组中 分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中...可以对分组后的数据进行统计,做聚合运算 select 列1,列2,聚合... from 表名 group by 列1,列2,列3... 1、查询男hero和女hero的总数 mysql> select

    11.1K30
    领券