我试图找到时间数据中的差距,但问题是我的数据不是固定间隔序列,所以我认为我不能使用这个解决方案:如何在 mysql 中找到序列编号的差距?
我的时间数据以毫秒为单位(bigint),通常每秒至少有一个值,所以我在想这样的事情:
SELECT *
FROM mytable AS t1
LEFT JOIN mytable AS t2 ON t2.time > t1.time AND (t2.time - t1.time) < 1000
WHERE t2.id IS NULL
ORDER BY t1.time ASC
LIMIT 100
但是该查询需要永远进行(我的表有超过 1 亿条记录)。
有没有更快的解决方案?// MySQL 版本 5.7.14
我还发现了这个:MySQL / MariaDB:如何找到基于时间的数据的差距?但是正在使用多个子选择,我认为这会更慢
MCRE:
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`time` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `TIME` (`time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
INSERT INTO test (time) VALUES
(10), (30), (50), (60), (65), (100), (150), (200), (350), (1000), (2500), (2600), (2660), (2700), (2800), (3000), (3500), (5000), (5100), (5150);