假设一个订单的编号规则是AAAAOrder2020-0000001,AAAAOrder2020-0000002....后面的数字是自增长,如果订单号码达到AAAAOrder2020-1000000(100万),数据库中应该有100万条数据,此时我随机删除2条数据(物理删除,且不考虑日志和备份),请问怎么找到删掉的数据的编号?给出解题思路即可,答案需要在1秒内运行得到。
福哥答案2020-04-23:
分批查询:分成500次count(),每次count()肯定小于等于2000条数据,经过测试,一次count()在.1ms左右,500次就是500ms。
二分法(时间微超):count() 50万,25万,12.5万依次下去。
rownum作差(时间超):rownum和id首个差值,取id。
错位join(时间超):SELECT C_ID FROM t_vd20190814 WHERE C_ID NOT IN (SELECT C_ID+1 FROM t_vd20190814)