MySQL 如何快速查出缺失数据的主键 id
例如,有如下数据:
id 1,3,7,8,10
如何快速查出缺失的:
2,4,5,9
数据有千万条的情况。
例如,有如下数据:
id 1,3,7,8,10
如何快速查出缺失的:
2,4,5,9
数据有千万条的情况。

1 paragon Dec 8, 2017 最好的方法是只插不删啊~ |
2 icemanpro Dec 8, 2017 二分? |
3 finull Dec 8, 2017 数据量大的情况下,最有效率的方法还是再构造一个只有 id 的表,值从 1 到现在的最大的 id,关联查询获取缺少的 ID 直接查询的方式可以参考这里: https://stackoverflow.com/questions/12325132/mysql-get-missing-ids-from-table |
4 realpg PRO 千万,就算一个亿好了,直接挨个循环搜索 int 主键看返回结果也用不了多久 |
5 realpg PRO 在地铁上不好打字 如果非要技巧的方法,回家我给你个办法 要求有权限使用临时中间表 |
6 zhx1991 Dec 8, 2017 笨办法, 挨个循环看 |
7 my3157 Dec 8, 2017 @finull #3 https://www.codediesel.com/mysql/sequence-gaps-in-mysql/ Finding missing numbers in a sequence Finding if a sequence has gaps is easy, finding the exact list of missing numbers is a little involved. The following query lists the missing numbers from a given auto-increment column. ``` SELECT a.id+1 AS start, MIN(b.id) - 1 AS end FROM testtableAS a, testtable AS b WHERE a.id < b.id GROUP BY a.id HAVING start < MIN(b.id) ``` |
8 LiuXuFei OP 笨办法,太笨,不合适哈。 数据如果缺失,有个定时任务随时采集需要加入的。 |