› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
LiuXuFei
V2EX  ›  MySQL

MySQL 如何快速查出缺失数据的主键 id

  •  
  •   LiuXuFei ·
    liuxufei · Dec 8, 2017 · 6545 views
    This topic created in 3237 days ago, the information mentioned may be changed or developed.
    MySQL 如何快速查出缺失数据的主键 id

    例如,有如下数据:
    id 1,3,7,8,10

    如何快速查出缺失的:
    2,4,5,9

    数据有千万条的情况。
    10 replies  •  2017-12-08 16:18:44 +08:00
    paragon
        1
    paragon  
       Dec 8, 2017
    最好的方法是只插不删啊~
    icemanpro
        2
    icemanpro  
       Dec 8, 2017
    二分?
    finull
        3
    finull  
       Dec 8, 2017
    数据量大的情况下,最有效率的方法还是再构造一个只有 id 的表,值从 1 到现在的最大的 id,关联查询获取缺少的 ID

    直接查询的方式可以参考这里: https://stackoverflow.com/questions/12325132/mysql-get-missing-ids-from-table
    realpg
        4
    realpg  
       Dec 8, 2017 via Android
    千万,就算一个亿好了,直接挨个循环搜索 int 主键看返回结果也用不了多久
    realpg
        5
    realpg  
       Dec 8, 2017 via Android
    在地铁上不好打字 如果非要技巧的方法,回家我给你个办法 要求有权限使用临时中间表
    zhx1991
        6
    zhx1991  
       Dec 8, 2017
    笨办法, 挨个循环看
    my3157
        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 testtable AS a, testtable AS b
    WHERE a.id < b.id
    GROUP BY a.id
    HAVING start < MIN(b.id)
    ```
    LiuXuFei
        8
    LiuXuFei  
    OP
       Dec 8, 2017
    笨办法,太笨,不合适哈。
    数据如果缺失,有个定时任务随时采集需要加入的。
    realpg
        9
    realpg  
       Dec 8, 2017
    @LiuXuFei #8
    你这个亿以下量级 随便用编程语言笨办法做一个 执行时间一点也不长 还没有写入操作不影响服务器,其实是最优解

    用所谓的聪明办法 无论啥办法 基本都绕不过中间表,插入数据写入一个一千万行的临时表耗时基本都是 4 分钟起的……
    LiuXuFei
        10
    LiuXuFei  
    OP
       Dec 8, 2017
    @finull
    @my3157 数据多好像很慢。

    算了,换一种方式,多采集几次,笨办法加一些条件应该就可以了。

    谢谢楼上各位的解答。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5515 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 01:25 · PVG 09:25 · LAX 18:25 · JFK 21:25
    ♥ Do have faith in what you're doing.