首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【MySQL】执行计划 explain 及 一条select语句MySQL的奇幻之旅

文章目录 示例 解释 一条select语句MySQL的奇幻之旅 示例 explain select * from emp; 解释 列(Column) 含义(Meaning) id The SELECT...type:此列是优化SQL语句时最需要关注的列之一,此列显示了查询使用了何种类型。...以下排序从最优到最差: system:表内只有一行数据 const:最多只会有一条记录匹配,常用于主键或者唯一索引为条件查询 eq_ref:当连接使用的索引为主键唯一时会出现 ref:使用普通索引=或...index_merge:查询语句使用了俩个以上的索引,常见使用and、or会出现,官方文档将此类型放在ref_or_null之后,但是很多的情况下由于读取索引过多性能有可能还不如range unique_subquery...:对数据使用一个外部的索引排序 Using index condition:使用了索引下推 一条select语句MySQL的奇幻之旅 注:MySQL8.0起以取消图中第九步(查询缓存)原因:把查询语句作为

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

SQL-GROUP BY语句MySQL的一个错误使用被兼容的情况

执行语句如下: SELECT * FROM stud GROUP BY saddress; 显示了如下错误: ERROR 1055 (42000): Expression #1 of SELECT list...SQL的grop by 语法为, select 选取分组的列+聚合函数 from 表名称 group by 分组的列 从语法格式来看,是先有分组,再确定检索的列,检索的列只能在参加分组的列中选...即 以下语句都是正确的: select a,b,c from table_name group by a,b,c,d; select a,b from table_name group by a,b,c...; select a,max(a) from table_name group by a,b,c; 以下语句则是错误的: select a,b,c from table_name group by a,...但是DOS是不能的。所以出现了DOS下报错,而在MySQL能够查找的情况(其实这个查找的结果是不对的)。

2K20

mysql分组函数

3.SQL语句当中有一个语法规则,分组函数不可直接使用在where子句当中。why????     怎么解释?         因为group by是where执行之后才会执行的。...并且任何一个分组函数(count sum avg max min)都是group by语句执行结束之后才会执行的。 当一条sql语句没有group by的话,整张表的数据会自成一组。...select ename,max(sal),job from emp group by job; 以上mysql当中,查询结果是有的,但是结果没有意义,Oracle数据库当中会报错。...语法错误。 Oracle的语法规则比MySQL语法规则严谨。 记住一个规则:当一条语句中有group by的话,select后面只能跟分组函数参与分组的字段。...where后面不能使用分组函数: select deptno,avg(sal) from emp where avg(sal) > 2000 group by deptno; // 错误了。

14210

SQL DELETE 语句:删除表记录的语法示例,以及 SQL SELECT TOP、LIMIT、FETCH FIRST 或 ROWNUM 子句的使用

SQL DELETE 语句 SQL DELETE 语句用于删除表的现有记录。 DELETE 语法 DELETE FROM 表名 WHERE 条件; 注意:删除表的记录时要小心!...Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden 删除所有记录 可以不删除表的情况下删除表的所有行...这意味着表结构、属性索引将保持不变: DELETE FROM 表名; 以下 SQL 语句将删除 "Customers" 表的所有行,而不删除表: DELETE FROM Customers; 删除表...的 LIMIT 以下 SQL 语句展示了 MySQL 的等效示例: 选择 "Customers" 表的前 3 条记录: SELECT * FROM Customers LIMIT 3; 使用 Oracle...FIRST 3 ROWS ONLY; 使用旧版 Oracle 的 ROWNUM 以下 SQL 语句展示了旧版 Oracle 的等效示例: 选择 "Customers" 表的前 3 条记录: SELECT

1.8K20

组函数及分组统计

分组函数 SQL中经常使用的分组函数 Count(): 计数 Max():求最大值 Min():求最小值 Avg():求平均值 Sum():求和 -- 统计emp...表的人数 select count(*) from emp; -- 统计获得奖金的人数 select count(comm) from emp; -- 求全部雇员的最低工资 select min...(sal) from emp; -- 求全部雇员的最高工资 select max(sal) from emp; -- 求部门编号为20的雇员的平均工资总工资 select avg(sal),sum...这样能够将分组条件一起查询出来 假设不使用GROUP BY,则仅仅能单独地使用分组函数 2.使用分组函数时,查询结果列不能出现分组函数分组条件之外的字段 综上所述,我们进行分组统计查询时有遵循这样一条规律...假设没有出如今组函数。就必然出如今GROUP BY 语句的后面 -- 统计出每一个部门的最高工资。

1.5K20

SQL使用(一):如何使用SQL语句去查询第二高的值

,可以使用maxmin去查询出来,但对于第N的就不好找了,思考了一会儿了,心里大致有二个思路: 第一个思路,因为是求的第二高,那就把最高的找出来,小于的它的,然后再排列一下取最大的就行了 # 1、求最大的值...这道题主要考察的知识点就是LIMIT的使用对NULL的处理,之前写过一篇与LIMIT有关的文章,LIMIT实际使用过程使用情况非常普遍。...知识点总结: LIMIT LIMIT 一般都是放在SQL语句的最后,是对展示的结果做一个限制输出,比如查询了十条记录,但只展示一条,那就可以SQL语句后面加一个LIMIT 1。...row_count 表示 返回的记录数 # offset为偏移量,表示从哪条数据开始返回,使用过程也可以省略 举例: 1、查询出雇员表的5条记录 select * from Employee limit...如果SQL语句是这样写的: select ifnull(null,"展示我" ); 输出结果: ?

5.4K10

MySQL 怎么用索引实现 group by?

我们用 explain 分析包含 group by 的 select 语句时,从输出结果的 Extra 列经常可以看到 Using temporary; Using filesort。...,然后就接着读取下一个分组的分组前缀,这样可以减少 select 语句执行过程需要读取的记录数,从而比紧凑索引扫描更快(有例外情况,后面会介绍)。...松散索引扫描 如果 select 语句执行过程中使用了松散索引扫描实现 group by,explain 输出结果的 Extra 列会显示 Using index for group-by。...松散索引扫描虽然具备提升 select 语句执行效率的能力,但只有适用的场景下才能发挥它的威力,因此,它的使用需要满足以下条件: 条件 1,select 语句只能是单表查询,不能是连接查询。...松散索引扫描成本比紧凑索引扫描成本更高时,如果 select 语句中的聚合函数是 min()、max() 的 1 ~ 2 个,就会使用紧凑索引扫描。

6.3K60

SQL为王:oracle标量子查询表连接改写

Oracle允许select子句中包含单行子查询,这个也就是oracle的标量子查询,标量子查询有点类似于外连接,当使用到外连接时我们可以灵活的将其转化为标量子查询。...标量子查询也可以有聚合函数的出现: SQL> select a.username,(select max(b.object_id) from t2 b where b.owner=a.username...这个SQL主要是标量子查询中用了聚合函数min非等值关联trunc(contdate) >= a.opensaledatetrunc(buydate) >= a.opensaledate,聚合函数可以参考我们之前的写法用...(contdate)min(buydate)数据,同样有min函数如果需要将这些满足条件的数据输出需要再次关联一次a表,而比较容易的就是将满足条件的rowid去a表重复做left join,满足a.rowid...=x.rid就全部输出,不满足的就补全null 其实还可以用分析函数更简单的改写为 ?

3.1K60

MySQL 怎么用索引实现 group by?

我们用 explain 分析包含 group by 的 select 语句时,从输出结果的 Extra 列经常可以看到 Using temporary; Using filesort。...,然后就接着读取下一个分组的分组前缀,这样可以减少 select 语句执行过程需要读取的记录数,从而比紧凑索引扫描更快(有例外情况,后面会介绍)。...松散索引扫描 如果 select 语句执行过程中使用了松散索引扫描实现 group by,explain 输出结果的 Extra 列会显示 Using index for group-by。...松散索引扫描虽然具备提升 select 语句执行效率的能力,但只有适用的场景下才能发挥它的威力,因此,它的使用需要满足以下条件: 条件 1,select 语句只能是单表查询,不能是连接查询。...松散索引扫描成本比紧凑索引扫描成本更高时,如果 select 语句中的聚合函数是 min()、max() 的 1 ~ 2 个,就会使用紧凑索引扫描。

4.9K20

SQLGroup By的使用,以及一些特殊使用方法

Access不可以使用“order by 数量之和 desc”,但在SQL Server则可以。...这就是需要注意的一点,select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数。 ?...from A group by 类别, 摘要 7、Group By与聚合函数 示例3提到group by语句select指定的字段必须是“分组依据字段”,其他字段若想出现在select则必须包含在聚合函数...,常见的聚合函数如下表: 函数 作用 支持性 sum(列名) 求和 max(列名) 最大值 min(列名) 最小值 avg(列名) 平均值 first(列名) 第一条记录 仅Access支持 last...compute子句能够观察“查询结果”的数据细节或统计各列数据(如例10maxminavg),返回结果由select列表compute统计结果组成。

2.5K20

【面经】面试官:如何以最高的效率从MySQL随机查询一条记录?

从这个题目来看,其实包含了两个要求,第一个要求就是:从MySQL数据表查询一条随机的记录。第二个要求就是要保证效率最高。 接下来,我们就来尝试使用各种方式来从MySQL数据表查询数据。...如果你通过EXPLAIN来分析这个 语句,会发现虽然MySQL通过建立一张临时表来排序,但由于ORDER BYLIMIT本身的特性,排序未完成之前,我们还是无法通过LIMIT来获取需要的记录。...MySQL查询5条不重复的数据,使用以下: SELECT * FROM `table` ORDER BY RAND() LIMIT 5 就可以了。但是真正测试一下才发现这样效率非常低。...上面的语句采用的是JOIN,mysql的论坛上有人使用 SELECT * FROM `table` WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM...我最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有一半的时间总是查询到表的前面几行。

3.2K20

)史上最全干货!Flink SQL 成神之路(全文 18 万字、138 个案例、42 张图)

3.SQL 语法篇 3.1.DDL:Create 子句 CREATE 语句用于向当前或指定的 Catalog 中注册库、表、视图或函数。注册后的库、表、视图函数可以 SQL 查询中使用。...3.1.1.建表语句 下面的 SQL 语句就是建表语句的定义,根据指定的表名创建一个表,如果同名表已经 catalog 存在了,则无法注册。...; 3.3.DML:SELECT & WHERE 子句 ⭐ 应用场景(支持 Batch\Streaming):SELECT & WHERE 语句离线 Hive SQL 语句一样的,xdm,常用作 ETL...3.4.DML:SELECT DISTINCT 子句 ⭐ 应用场景(支持 Batch\Streaming):语句离线 Hive SQL SELECT DISTINCT 语句一样的,xdm,用作根据...博主这里测试了下使用 redis pipeline 使用的时长消耗对比。如下图所示。 博主认为上述优化效果,最好用的是 1 + 3,2 相比 3 还是一条一条发请求,性能会差一些。

5.2K11

MySQL学习笔记汇总(二)——分组查询、连接查询、union

可以合并集合(相加)) 一、分组查询 分组函数(多行处理函数) count 取得记录数 sum 求和 avg 取平均 max 取最大的数 min 取最小的数 分组函数也叫:多行处理函数。...案例: 取得所有的员工数 select count(*) from emp; 取得薪水的合计 select sum(sal) from emp; 单行处理函数 输入一行,输出一行。...注意: 分组函数一般都会group by联合使用,并且任何一个分组函数(count sum avg max min)都是group by语句执行结束之后才会执行的。...当一条sql语句没有group by的话,整张表的数据会自成一组。 当一条语句中有group by的话,select后面只能跟分组函数参与分组的字段。...假设AB表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表的数据,捎带着查询副表,当副表的数据没有主表的数据匹配上,副表自动模拟出NULL与之匹配。

1.9K20

第16章_变量、流程控制与游标

变量 MySQL 数据库的存储过程函数,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据。 MySQL 数据库,变量分为 系统变量 以及 用户自定义变量 。...结合创建存储过程的 SQL 语句代码可以得出:存储过程未定义条件处理程序,且当存储过程执行的 SQL 语句报错时,MySQL 数据库会抛出错误,并退出当前 SQL 逻辑,不再向下继续执行。...定义条件使用 DECLARE 语句,语法格式如下: DECLARE 错误名称 CONDITION FOR 错误码(或错误条件) 错误码的说明: MySQL_error_code sqlstate_value...游标 # 4.1 什么是游标(或光标) 虽然我们也可以通过筛选条件 WHERE HAVING,或者是限定返回记录的关键字 LIMIT 返回一条记录,但是,却无法结果集中像指针一样,向前定位一条记录...MySQL 中游标可以存储过程函数中使用

28310

TiDB 慢查询日志分析

导读TiDB 的慢查询日志是一项 关键的性能监控工具,其主要作用在于协助数据库管理员追踪执行时间较长的 SQL 查询语句。...这些工具通常以某种聚合的方式输出结果,使结果更加清晰易懂。借鉴这些工具的思路,笔者开发了一条常用的慢日志分析 SQL,以更便捷地处理慢查询日志。...`Time`) min_time,max(s....在这个 SQL ,query plan 字段是使用标量子查询的方式获取。经过测试,这种写法相比直接使用 group by,能够节省大量内存,所以能够分析更长时间段的慢查询。...脚本请在这个链接取: https://asktug.com/t/topic/1022684效果展示:总结本文阐述了 TiDB 慢查询日志的相关配置原理,并分享了笔者实际工作中使用的慢查询日志分析 SQL

18010
领券