亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ResultSet 是否應該在批處理中保持打開狀態以避免多次提取查詢

ResultSet 是否應該在批處理中保持打開狀態以避免多次提取查詢

MYYA 2023-03-17 16:47:11
我正在從 MariaDB 獲取記錄(大數據集,大約 100 萬條記錄),批量大小為 500(通過使用“限制”)。對于每次獲取迭代,我都會打開和關閉連接。在我的同行評審中,我被建議獲取一次結果集并通過迭代結果集本身進行批處理,即不關閉連接。第二種方法是正確的做法嗎?編輯:在我批量獲取 500 條記錄后,我正在為每條記錄更新一個字段并將其放在消息隊列中。
查看完整描述

3 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

Your program starts

    Connect to database

        do some SQL (selects/inserts/whatever)

        do some more SQL (selects/inserts/whatever)

        do some more SQL (selects/inserts/whatever)

        ...

    Disconnect from database

Your program ends

也就是說,在程序期間只要需要就保持連接打開。(即使你沒有明確斷開連接,程序的終止也會終止。在做網站時要注意這一點很重要——每個“頁面”本質上都是一個單獨的“程序”;無法保持數據庫連接頁之間。)


你還有另一個隱含的問題......“我應該一次抓取一批行,然后在客戶端處理它們嗎?” 答案是“視情況而定”。


如果可以在 SQL 中完成處理,那么在 SQL 中進行處理可能會更有效率。示例:總結一些數字。

如果您從一個表中獲取一些行,然后對于這些行中的每一行,從另一個表中獲取行...使用 SQL 會更有效率JOIN。

“批處理”可能不相關??蛻舳私缑娲蟾攀?/p>


Fetch rows from a table (possibly all rows, even if millions)

Look at each row in turn.

請提供您將對百萬行執行的具體操作,以便我們進行更具體的討論。


輪詢循環:


如果您每分鐘只檢查一次要執行的新任務,請務必每次都重新連接。


鑒于此,掛在池之間的結果集上沒有意義。


查看完整回答
反對 回復 2023-03-17
?
慕森王

TA貢獻1777條經驗 獲得超3個贊

是的,第二種方法是正確的做法。以下是一些原因:

  • 多次運行查詢會產生開銷。

  • 您正在使用的表中的基礎數據可能會發生變化,并且單獨的批次可能會不一致。

  • 您取決于結果的順序,并且排序可能有重復。


查看完整回答
反對 回復 2023-03-17
?
四季花海

TA貢獻1811條經驗 獲得超5個贊

打開和關閉數據庫連接非常耗時。保持連接打開將節省大量時間。



查看完整回答
反對 回復 2023-03-17
  • 3 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號