以mysql8.0.28执行Q17慢SQL,作为分析对比
- 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)
-
- 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
- );
- 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 |
- [root@localhost ~]# 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
- [root@localhost ~]#
- [root@localhost ~]# top -Hp 19895