兩個800萬條目的表,相同主鍵,總數差了1個,如何高效的將其找出來?

MyISAM類型的 tb1 和 tb2,主鍵都是id(int,不是很連續,數值範圍1 - 1600萬),本來這兩個表應該是完全相同的 id,但不知怎麼搞的 tb1 比 tb2 多了一條記錄,怎麼找出來比較快啊?not in 很慢的,從網上找了個 left join 的也很慢,反正我這十分鐘都出不來。


試試求兩表id和的差。


將兩個表1600萬主鍵的異或, 最後得出的值就是多出來的主鍵


select a.seg

from

(select floor(id / 10000) seg, sum(1) num

from ta

group by floor(id / 10000)) a,

(select floor(id / 10000) seg, sum(1) num

from tb

group by floor(id / 10000)) b

where a.seg = b.seg

and a.num &<&> b.num;

確定差異出現在的大致範圍;沒查到則要換join寫法

select *

from ta

where id between seg * 10000 and seg * 10000 + 9999

and exists (select 1 from tb where tb.id = ta.id);

沒查到再 ta tb 反過來查


把2個表的id放在一起異或,最後的結果就是多出來的那個id


推薦閱讀:

考OCP做DBA的職業規劃路線是否具有以下優勢或者特質?歡迎拍磚。
為什麼我在Sql Server上創建的索引用不上?
學習 Oracle 資料庫成為 DBA 有什麼好的方法嗎?需要什麼樣的基礎?
學習Oracle,有什麼好的中文網站或論壇?
自增主鍵是否會降低資料庫insert性能?如果會的話為什麼還有很多公司採用?

TAG:資料庫 | SQL | MySQL | 資料庫管理員DBA |