一時データのギャップを見つけようとしていますが、問題は私のデータが固定間隔シーケンスではないため、この解決策を使用できないと思います: 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);