当前位置:网站首页>2022-07-30 mysql8执行慢SQL-Q17分析
2022-07-30 mysql8执行慢SQL-Q17分析
2022-08-02 02:08:00 【帝尊悟世】
摘要:
以mysql8.0.28执行Q17慢SQL,作为分析对比
环境信息:
- 内存: 8GB
- cpu: 8核心,3.2GHz
- mysql: 8.0.28
执行分析:
DDL:
mysql> show create table lineitem\G
*************************** 1. row ***************************
Table: lineitem
Create Table: CREATE TABLE `lineitem` (
`l_orderkey` int NOT NULL,
`l_partkey` int NOT NULL,
`l_suppkey` int NOT NULL,
`l_linenumber` int NOT NULL,
`l_quantity` decimal(15,2) NOT NULL,
`l_extendedprice` decimal(15,2) NOT NULL,
`l_discount` decimal(15,2) NOT NULL,
`l_tax` decimal(15,2) NOT NULL,
`l_returnflag` char(1) NOT NULL,
`l_linestatus` char(1) NOT NULL,
`l_shipdate` date NOT NULL,
`l_commitdate` date NOT NULL,
`l_receiptdate` date NOT NULL,
`l_shipinstruct` char(25) NOT NULL,
`l_shipmode` char(10) NOT NULL,
`l_comment` varchar(44) NOT NULL,
PRIMARY KEY (`l_orderkey`,`l_linenumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> show create table part\G
*************************** 1. row ***************************
Table: part
Create Table: CREATE TABLE `part` (
`p_partkey` int NOT NULL,
`p_name` varchar(55) NOT NULL,
`p_mfgr` char(25) NOT NULL,
`p_brand` char(10) NOT NULL,
`p_type` varchar(25) NOT NULL,
`p_size` int NOT NULL,
`p_container` char(10) NOT NULL,
`p_retailprice` decimal(15,2) NOT NULL,
`p_comment` varchar(23) NOT NULL,
PRIMARY KEY (`p_partkey`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.02 sec)
SQL:
select
sum(l_extendedprice) / 7.0 as avg_yearly
from
lineitem,
part
where
p_partkey = l_partkey
and p_brand = 'Brand#23'
and p_container = 'MED BOX'
and l_quantity < (
select
0.2 * avg(l_quantity)
from
lineitem
where
l_partkey = p_partkey
);
explain分析:
mysql> explain select
from
lineitem
where
l_partkey = p_partkey
)\G -> sum(l_extendedprice) / 7.0 as avg_yearly
-> from
-> lineitem,
-> part
-> where
-> p_partkey = l_partkey
-> and p_brand = 'Brand#23'
-> and p_container = 'MED BOX'
-> and l_quantity < (
-> select
-> 0.2 * avg(l_quantity)
-> from
-> lineitem
-> where
-> l_partkey = p_partkey
-> )\G
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: lineitem
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 31751480
filtered: 100.00
Extra: NULL
*************************** 2. row ***************************
id: 1
select_type: PRIMARY
table: part
partitions: NULL
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: tpch.lineitem.l_partkey
rows: 1
filtered: 5.00
Extra: Using where
*************************** 3. row ***************************
id: 2
select_type: DEPENDENT SUBQUERY
table: lineitem
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 31751480
filtered: 10.00
Extra: Using where
3 rows in set, 2 warnings (0.01 sec)
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | |
1 | PRIMARY | lineitem | ALL | 31751480 | 100 | |||||||
1 | PRIMARY | part | eq_ref | PRIMARY | PRIMARY | 4 | tpch.lineitem.l_partkey | 1 | 5 | Using where | ||
2 | DEPENDENT SUBQUERY | lineitem | ALL | 31751480 | 10 | Using where |
耗时分析:
性能分析:
iotop:
top:
[[email protected] ~]# ps -ef | grep mysqld
mysql 19895 1 39 20:21 ? 00:18:16 /usr/libexec/mysqld --basedir=/usr
root 20055 1793 0 21:07 pts/1 00:00:00 grep --color=auto mysqld
[[email protected] ~]#
[[email protected] ~]# top -Hp 19895
热力图:
边栏推荐
- 个人博客系统项目测试
- A full set of common interview questions for software testing functional testing [open thinking questions] interview summary 4-3
- Redis for distributed applications in Golang
- 【服务器数据恢复】服务器Raid5阵列mdisk磁盘离线的数据恢复案例
- Yunhe Enmo: Let the value of the commercial database era continue to prosper in the openGauss ecosystem
- PHP uses PHPRedis and Predis
- Shell入门终章
- AntPathMatcher使用
- Newton's theorem and related corollaries
- 手写一个博客平台~第一天
猜你喜欢
[LeetCode Daily Question]——654. The largest binary tree
LeetCode刷题日记:74. 搜索二维矩阵
3 Month Tester Readme: 4 Important Skills That Impacted My Career
"NetEase Internship" Weekly Diary (2)
HSDC和独立生成树相关
Yunhe Enmo: Let the value of the commercial database era continue to prosper in the openGauss ecosystem
Redis Subscription and Redis Stream
记录一次数组转集合出现错误的坑点,尽量使用包装类型数组进行转换
Chengdu openGauss user group recruit!
Use baidu EasyDL implement factory workers smoking behavior recognition
随机推荐
"NetEase Internship" Weekly Diary (3)
Win Go development kit installation configuration, GoLand configuration
Pcie the inbound and outbound
『网易实习』周记(二)
"NetEase Internship" Weekly Diary (1)
Redis Persistence - RDB and AOF
垃圾回收器CMS和G1
typescript30 - any type
【ORB_SLAM2】void Frame::AssignFeaturesToGrid()
For effective automated testing, these software testing tools must be collected!!!
Day116.尚医通:预约挂号详情 ※
typescript33 - high-level overview of typescript
制造企业数字化转型现状分析
6-24 exploit-vnc password cracking
Scheduled tasks for distributed applications in Golang
typescript34-class的基本使用
软件测试 接口自动化测试 pytest框架封装 requests库 封装统一请求和多个基础路径处理 接口关联封装 测试用例写在yaml文件中 数据热加载(动态参数) 断言
Redis for distributed applications in Golang
记录一次数组转集合出现错误的坑点,尽量使用包装类型数组进行转换
YGG Guild Development Plan Season 1 Summary