优化MySQL查询
我使用的是MySQL 8.0.20,我有一个巨大的表,其中包含一些数据优化MySQL查询,mysql,Mysql,我使用的是MySQL 8.0.20,我有一个巨大的表,其中包含一些数据 CREATE TABLE `db_table` ( `utcDateTime` datetime DEFAULT NULL, `dateTime` datetime DEFAULT NULL, `col1` varchar(250) DEFAULT NULL, `col2` varchar(10) DEFAULT NULL, `col3` varchar(5) NOT NULL D
CREATE TABLE `db_table` (
`utcDateTime` datetime DEFAULT NULL,
`dateTime` datetime DEFAULT NULL,
`col1` varchar(250) DEFAULT NULL,
`col2` varchar(10) DEFAULT NULL,
`col3` varchar(5) NOT NULL DEFAULT '1',
`col4` varchar(5) NOT NULL DEFAULT '1',
`id` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_dateIns` (`utcDateTime`,`col2`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8'
下面是我试图优化的问题
SELECT col3,col4
from db_table
WHERE col2='123456'
AND (dateTime BETWEEN '2020-11-25 00:01' AND '2020-11-26 00:00')
group by utcDateTime
order by utcDateTime asc limit 1;
执行此查询大约需要12秒。但是如果我把排序顺序改为desc,大约需要0.015秒
有人能帮助优化查询或数据库表吗
谢谢请至少提供示例数据和执行计划查询不正确或您只有
完全\u group\u by disabled
一个(col2,dateTime,utcDateTime)上的复合索引应该可以帮助您。在删除group by utcDateTime
后,查询所用的时间仍然与之前的11秒相同。我试图理解为什么更改顺序会对查询产生如此大的影响。我对此进行了一些思考。首先,结果证明该查询是有效的。通过将行限制为一个col2
,然后按utcDateTime
分组,所有选定的列在功能上依赖于该组。按utcDateTime
分组没有任何意义,因为与col2
组合使用时,它无论如何都是唯一的,但不会使查询无效。至于ASC
和DESC
之间的巨大差异:这也让我感到惊讶。DBMS似乎在一种情况下使用唯一索引,而在另一种情况下不使用唯一索引,但仍然。。。也许EXPLAIN
可以告诉我们更多。