兩個800萬條目的表,相同主鍵,總數差了1個,如何高效的將其找出來?
12-30
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) numfrom ta
group by floor(id / 10000)) a,(select floor(id / 10000) seg, sum(1) num from tbgroup 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性能?如果會的話為什麼還有很多公司採用?