【发布时间】:2020-04-14 07:16:21
【问题描述】:
我的 MySQL 数据库 start_time 和 end_time 中有两列。他们都是TIMESTAMP。我在这两列上创建了一个索引。
我有 350 万行。此查询需要 13 秒才能执行:
select * from test WHERE start_time > TIMESTAMP('2020-04-02 09:00:00') and end_time < TIMESTAMP('2020-04-02 10:00:00')
有什么办法可以优化吗?
编辑:
CREATE TABLE `test` (
`YYY` varchar(255) NOT NULL,
`start_time` timestamp NULL DEFAULT NULL,
`end_time` timestamp NULL DEFAULT NULL,
UNIQUE KEY `index1` (`YYY`,`start_time`) USING BTREE,
UNIQUE KEY `index2` (`YYY`,`start_time`,`end_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
【问题讨论】:
-
不知道,我在一些问题中找到了解决方案。
-
第二次回复是什么意思?
-
哦,我弄错了,实际上是 end_time
-
一次只能使用一个索引,因此 endtime 上的索引(可能为 NULL)不如 starttime 上的索引(可能不能为 null)有用。但是两者的复合索引可能最有用(一旦你摆脱了那些无意义的功能)
-
我正在使用复合索引。当我摆脱这两个函数时,查询需要时间来执行,但结果告诉我它需要 0.000 秒!这正常吗?