數據量很大,邏輯不能在內存里做怎麼辦?

比如說我有幾百萬條數據,甚至更多,然後還連到別的表

相關聯的表有三四個,甚至還需要一些小型的邏輯 比如說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都分別有哪些認證呢??
面向主題的資料庫技術的概念已經提出十幾年了,理念是先進的,但為什麼被實際應用很少?

TAG:資料庫 | MySQL | 邏輯 | SQL語句 | 後台開發 |