0

一時データのギャップを見つけようとしていますが、問題は私のデータが固定間隔シーケンスではないため、この解決策を使用できないと思います: mysql で連続番号付けのギャップを見つける方法は?
私の一時的なデータはミリ秒単位 (bigint) で、通常は毎秒少なくとも 1 つの値があるため、次のように考えていました。

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

4

0 に答える 0