2011-01-10 128 views
1

我需要將一組URL(50000 - 100000)與數據庫表的記錄進行比較,大約有20,000.000行。我有一些遺留代碼通過將數據庫中的所有數據加載到散列並進行比較來完成此操作。雖然這可行,但它需要在內存方面進行改進(速度目前不是問題)。新數據與大型數據庫記錄的高效比較

我正在考慮的一種替代方法是分割輸入數據(例如按域)並對數據庫執行多個選擇。這可能適用於某些輸入,但不會爲所有內容擴展。

另一種替代方法是爲每個輸入查詢數據庫,而不是將任何數據加載到內存中。恐怕這可能太慢了。

我正在使用mysql。任何人都會遇到像這樣的問題?將所有數據遷移到另一個系統/ dbms是一個選項。


+0

100K可以選擇每如果索引設置正確,形成得足夠快。 – zerkms

+0

我們是否應該假定通過直接的SQL查詢來做到這一點不起作用? –

+0

這是一個選項。我會盡力先做,看看它是如何工作的。我只是想知道在哪裏有一個更有效的方法來做到這一點。 – luis

回答

2

假設你已經在列的索引,並做一個簡單的比較a = b比查詢每個輸入不應該是一個問題。

使用索引時,這樣的查詢應該不會超過幾毫秒,因此即使使用50,000個URL,查詢時間也不應超過10分鐘。

+1

是的,它可以通過比較而不是'=',而是通過'url IN(10-50-100 urls)'來加速。 – zerkms

0

定義唯一鍵上的網址列(假設已經是唯一的),
添加一列ROW_COUNT到大表

alter table big_table add column_row_count int(1) not null default 0; 
insert into big_table 
select all_columns, 0 from small_table 
on duplicate key set row_count=1; 

那些row_count=1是重複記錄

或者你不感興趣拿回什麼是重複記錄, 簡單地做一個

insert ignore ...