「我試圖用java通過通過JDBC連接列表中存儲兩個表中的數據,然後遍歷一個列表與其他。但它是非常緩慢的,花了很多時間來完成,甚至很多時候都有超時的例外。「
恭喜。這是通往啓蒙之路的第一步。數據庫比Java更好地處理數據。 Java是一種很好的通用編程語言,但是數據庫針對關係數據處理進行了優化:它們只是以更快的速度,更少的CPU,更少的內存和更少的網絡流量進行操作。
「我還創建了一個SQL程序一樣,它是一些比Java程序快了什麼,但 還是花了很多時間(幾個小時) 完成。「
你在第二步的邊緣以啓示:一行一行地處理(即程序迭代)是緩慢的SQL是基於集合的模式設置處理的速度要快得多
。
要給予具體的建議,我們需要你的做法其實一些細節,但作爲一個例子該查詢會給你設定的這些列匹配的兩個表中:
select col1, col2, col3
from huge_table_1
INTERSECT
select col1, col2, col3
from huge_table_2
減號來會給你的huge_table_1
中的行不在huge_table_2
中。翻轉表來獲得正面設置。
select col1, col2, col3
from huge_table_1
MINUS
select col1, col2, col3
from huge_table_2
擁抱歡樂套裝!
「我們首先在比較中huge_table_1名字不應該是平等的 在huge_table_2的名字,然後我們在huge_table_1 比較城市應該等於城市huge_table_2然後最後我們 比較在huge_table_1中的date_of_birth應該在+ 1年內 在huge_table_2中的date_of-birth的範圍「
嗯。從不平等開始往往是不好的,特別是在大型表格中。很可能你會有許多不匹配的名字和那些匹配的標準。但你可以嘗試這樣的事情:
select * from huge_table_1 ht1
where exists
(select null from huge_table_2 ht2
where ht2.city = ht1.city
and ht1.date_of birth between add_months(ht2.date_of birth, -12)
and add_months(ht2.date_of birth, 12)
and ht2.name != ht1.name)
/
來源
2017-04-14 07:10:23
APC
你能分享表和列的列,你在哪些基礎上比較這些表。 – Usama
首先,因爲您已經擁有數據庫中的數據,所以Java肯定不是比較的正確解決方案。至於DB,這樣的任務不僅需要調整查詢,數據存儲,數據庫和表格定義,索引,硬件等都扮演着更重要的角色。這是一個廣泛的領域,您應該與您的DBA討論。 –