一位同事告訴我,執行SQL語句總是將數據放入數據庫服務器的RAM /交換中。因此選擇較大的結果集是不現實的。執行語句是否總是在內存中存儲結果集?
我認爲這種代碼
my $sth = $dbh->prepare('SELECT million_rows FROM table');
while (my @data = $sth->fetchrow) {
# process the row
}
由行中檢索結果集行,沒有它被加載到RAM中。 但我在DBI或MySQL文檔中找不到任何對此的引用。結果集是如何真正創建和檢索的?它對簡單的選擇和連接工作是否一樣?
問題的目的,爲什麼你需要獲取數百萬行記錄並迭代獲取所有? 'mysqldump'應該更合適 – ajreal 2010-11-12 19:40:28
@ajreal:我需要按插入順序處理所有行並生成一些報告。 – planetp 2010-11-15 10:49:31
好的,這樣做是否合理?使用mysql函數生成視圖,臨時表不夠用於報告?或者甚至考慮將BIG結果轉儲到文件中,然後打開文件進行處理 – ajreal 2010-11-15 10:55:21