Как найти пробелы во временных данных внутри большой таблицы mysql - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь найти пропуски во временных данных, но проблема в том, что мои данные не являются последовательностью с фиксированным интервалом, поэтому я не могу использовать это решение: Как найти пропуски в последовательной нумерации в 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

Но этот запрос требует навсегда (моя таблица содержит более 100 миллионов записей).
Есть ли более быстрое решение? // 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

...