[英]MySQL 5.6 is faster than MySQL 8
我正在運行一個查詢,它在MySQL5.6上比MySQL8快。 在MySQL5.6中大約需要4秒,而在MySQL8中則需要32秒。 根據MySQL文檔,MySQL8更快,但是我看到了相反的情況。
查詢:
select id
from defaultitem
where masterId='3b1e9726-12ea-4adf-a6ef-f0950075fec4'
and mainID in (
select id
from campaign
where deleteflag=0
and validflag=1
and deptid='9d9d7e0f-7256-4ac6-9398-378ae9a0239e')
顯示創建表:
defaultitem - CREATE TABLE `defaultitem` (
`id` varchar(255) NOT NULL,
`value` varchar(50) NOT NULL,
`masterId` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK22505D768EC27364` (`masterId`),
CONSTRAINT `FK22505D768EC27364` FOREIGN KEY (`masterId`) REFERENCES `combomaster` (`masterid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
campaign - CREATE TABLE `campaign` (
`id` varchar(255) NOT NULL,
`deptid` varchar(255) DEFAULT NULL,
`deleteflag` tinyint(4) DEFAULT '0',
`validflag` tinyint(4) DEFAULT '0',
PRIMARY KEY (`id`),
KEY `FK47DDEA51F157E732` (`deptid`),
CONSTRAINT `FK47DDEA51F157E732` FOREIGN KEY (`deptid`) REFERENCES `dept` (`deptid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
EXPLAIN query in MySQL5.6 -
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------------+--------+----------------------------+--------------------+---------+-----------------------------------+--------+------------------------------------+
| 1 | SIMPLE | defaultitem | ref | FK22505D768EC27364 | FK22505D768EC27364 | 768 | const | 812528 | Using index condition; Using where |
| 1 | SIMPLE | campaign | eq_ref | PRIMARY,FK47DDEA51F157E732 | PRIMARY | 767 | db.defaultitem.mainID | 1 | Using where |
+----+-------------+-------------------+--------+----------------------------+--------------------+---------+-----------------------------------+--------+------------------------------------+
EXPLAIN QUERY in MySQL8 -
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------------------+------------+------+----------------------------+--------------------+---------+-------+--------+----------+-------------+
| 1 | SIMPLE | campaign | NULL | ref | PRIMARY,FK47DDEA51F157E732 | FK47DDEA51F157E732 | 768 | const | 15 | 1.00 | Using where |
| 1 | SIMPLE | defaultitem | NULL | ref | FK22505D768EC27364 | FK22505D768EC27364 | 768 | const | 787517 | 10.00 | Using where |
+----+-------------+-------------------+------------+------+----------------------------+--------------------+---------+-------+--------+----------+-------------+
兩個版本的innodb_buffer_pool_size相同。
我以為MySQL 8會更快。
您的查詢在功能上與以下內容相同:
SELECT DISTINCT x.id
FROM defaultitem x
JOIN campaign y
ON y.id = x.mainid
AND y.deleteflag = 0
AND y.validflag = 1
AND y.deptid = '9d9d7e0f-7256-4ac6-9398-378ae9a0239e'
WHERE x.masterId = '3b1e9726-12ea-4adf-a6ef-f0950075fec4';
...所以為什么不這樣寫呢。
(deptid,validflag,deleteflag)的某種組合上的鍵可能會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.