數據量很大,邏輯不能在內存里做怎麼辦?
01-13
比如說我有幾百萬條數據,甚至更多,然後還連到別的表
相關聯的表有三四個,甚至還需要一些小型的邏輯 比如說if for all之類的我之前沒做過這麼大的情況,以前都是直接把結果集讀到內存里,然後想怎麼捏它怎麼捏。現在這麼多條數據,我覺得肯定不能讀到內存里吧。
大家都是怎麼處理這麼問題的呢?難道寫一個 帶有 case when in exists等關鍵字的、長度超過五六百的sql語句嗎?
比如說我有幾百萬條數據,甚至更多,然後還連到別的表
相關聯的表有三四個,甚至還需要一些小型的邏輯 比如說if for all之類的我之前沒做過這麼大的情況,以前都是直接把結果集讀到內存里,然後想怎麼捏它怎麼捏。
現在這麼多條數據,我覺得肯定不能讀到內存里吧。大家都是怎麼處理這麼問題的呢?難道寫一個 帶有 case when in exists等關鍵字的、長度超過五六百的sql語句嗎?回答:
1.沒有必要考慮是否數據載入到內存中,直接使用資料庫處理即可;
2.你描述的內容看,只是判斷轉換的操作,則堅定使用資料庫沒有任何問題;
3.需要做多張表的關聯操作,這屬於很正常的,關鍵是要關聯的條件和索引等合理;
4.對於你的描述不會如你所言超過5,6百行的語句;
最後,請提供完整的SQL語句才好給出準確的優化建議,重點是SQL語句如何寫,索引如何創建。用了資料庫還要讀進內存自己算是一種什麼樣的精神啊……
我覺得你的問題在於把SQL當Java寫了,其實SQL有很多簡潔的但是跟普通編程語言完全不同的方法來做很多計算的,不如繼續學習學習。
你要處理的邏輯總能轉化為關係型資料庫,SQL查詢,視圖,存儲過程能夠表達的問題吧。
資料庫的一個重要用途就是解決外存運算,而不是讓每個程序員都造一遍輪子寫演算法。再說500行的sql……不知道題主的邏輯涉及大量數據的到底有多複雜,學好關係代數,很可能不需要這麼多。
30 40行的sql不是很正常么
老老實實寫sql吧,實在不行搞幾張臨時表吧。看你說的數據量跟表關係也真沒到那麼糾結的程度。還有樓上推薦的大數據處理框架也不錯。
1000行以上的sql(存儲過程)也很常見啊,Just do it!
推薦閱讀:
※高並發insert ignore是選擇innodb還是myisam?
※innodb的意向鎖有什麼作用?
※如果從頭開始,如何少走彎路成為合格的DBA?
※目前的資料庫管理認證都有哪些呢?Oracle、DB2、MS SQL、MySQL都分別有哪些認證呢??
※面向主題的資料庫技術的概念已經提出十幾年了,理念是先進的,但為什麼被實際應用很少?