Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化MySQL查询_Mysql - Fatal编程技术网

优化MySQL查询

优化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

我使用的是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 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
可以告诉我们更多。