首页 > 解决方案 > 如何在大 mysql 表中找到时间数据的间隙

问题描述

我试图找到时间数据中的差距,但问题是我的数据不是固定间隔序列,所以我认为我不能使用这个解决方案:如何在 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);

http://sqlfiddle.com/#!9/a8f5a2/2/0

标签: mysqlgaps-and-islandsgaps-in-data

解决方案


推荐阅读