mysql查询统计数量

mysql查询统计数量,第1张

一共加了三条数据

insert into pl_org_region(parent_id,region_sn,region_name,comments) values (0,'001','北京大区','无')

insert into pl_org_region(parent_id,region_sn,region_name,comments) values (0,'002','西南大区','无')

insert into pl_store (store_sn,region_id,region_name) values ('P001',6,'北京大区')

查询语句改成:

SELECT

p.region_id,

COUNT(p.region_id) AS cnt,

r.*

FROM

pl_org_region r

LEFT JOIN pl_store p ON r.region_id = p.region_id

GROUP BY

p.region_id

查询结果:

select * from (

select id,num,rank from (

select heyf_tmp.id,heyf_tmp.num,@rownum:=@rownum+1 ,

if(@pdept=heyf_tmp.id,@rank:=@rank+1,@rank:=1) as rank,

@pdept:=heyf_tmp.id

from (

select id,num from (SELECT

t.OPERATE_LOG_USER_ID AS id,

t.OPERATE_SEARCH_WORD AS word,

COUNT(*)AS num

FROM

skp_operate_log AS t

WHERE

t.OPERATE_LOG_TIME

GROUP BY

id,

word

ORDER BY

num DESC)tt order by id asc ,num desc

) heyf_tmp ,(select @rownum :=0 , @pdept := null ,@rank:=0) a ) result

)ttt

where rank in(1,2)

本期我们用 MySQL 提供的 DBUG 工具来研究 MySQL 的 SQL 处理流程。

起手先造个实例

这里得稍微改一下实例的启动文件 start,将 CUSTOM_MYSQLD 改为 mysqld-debug:

重启一下实例,加上 debug 参数:

我们来做一两个实验,说明 DBUG 包的作用:

先设置一个简单的调试规则,我们设置了两个调试选项:

d:开启各个调试点的输出

O,/tmp/mysqld.trace:将调试结果输出到指定文件

请点击输入图片描述

然后我们创建了一张表,来看一下调试的输出结果:

请点击输入图片描述

可以看到 create table 的过程中,MySQL 的一些细节 *** 作,比如分配内存 alloc_root 等

这样看还不够直观,我们增加一些信息:

请点击输入图片描述

来看看效果:

请点击输入图片描述

可以看到输出变成了调用树的形式,现在就可以分辨出 alloc_root 分配的内存,是为了解析 SQL 时用的(mysql_parse)

我们再增加一些有用的信息:

请点击输入图片描述

可以看到结果中增加了文件名和行号:

请点击输入图片描述

现在我们可以在输出中找一下统计表相关的信息:

请点击输入图片描述

可以看到 MySQL 在这里非常机智,直接执行了一个内置的存储过程来更新统计表。

沿着 que_eval_sql,可以找到其他类似的统计表,比如下面这些:

请点击输入图片描述

请点击输入图片描述

本次实验中,我们借助了 MySQL 的 DBUG 包,来让 MySQL 将处理过程暴露出来。MySQL 中类似的技术还有不少,比如 performance_schema,OPTIMIZER_TRACE 等等。

这些技术将 MySQL 的不同方向的信息暴露出来,方便大家理解其中机制。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6119135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存