」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 將 fetchall() 與 MySQLDB SSCursor 結合使用對於大型資料集實際上有效嗎?

將 fetchall() 與 MySQLDB SSCursor 結合使用對於大型資料集實際上有效嗎?

發佈於2024-11-18
瀏覽:503

Is Using fetchall() with MySQLDB SSCursor Actually Efficient for Large Datasets?

高效利用MySQLDB SSCursor 處理大型結果集

處理涉及數十萬或更多行的龐大結果集時,高效的內存管理變得尤為重要至關重要的。因此,MySQLDB SScursor(串流選擇遊標)成為最小化記憶體消耗的合適工具。

有基礎遊標的Fetchall() 與SSCursor 的差異

與普遍看法相反,從SScursor 執行fetchall() 比從基本遊標執行fetchall() 消耗更多內存。這是因為 SScursor 會以區塊的形式從伺服器增量取得結果,而 fetchall() 會將整個結果集下載到記憶體中。因此,對於記憶體受限的情況,使用 fetchall() 變得違反直覺。

使用SSCursor 迭代結果

為了有效地逐行流式傳輸來自SScursor 的結果,基於行,採用以下方法:

import MySQLdb.cursors
connection=MySQLdb.connect(
    host="thehost",user="theuser",
    passwd="thepassword",db="thedb",
    cursorclass = MySQLdb.cursors.SSCursor)

cursor=connection.cursor()
cursor.execute(query)

for row in cursor:
    print(row)

此方法迭代結果集,而不將整個內容儲存在記憶體中,消耗最少的資源。

其他最佳化

  • 透過指定 WHERE 子句或使用 LIMIT 來限制結果集大小。
  • 在下列情況下使用伺服器端遊標可能。
  • 採用批量獲取來處理分組結果。
  • 考慮替代資料庫引擎,例如 MariaDB 的 MyRocks,它可以有效地處理大型結果集。
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3