国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

如何解決PHP使用mysql_query查詢超大結果集超內存問題

2020-03-22 17:02:46
字體:
來源:轉載
供稿:網友
再使用mysql_query查詢超大結果集的時候會出現超出內存限制的致命錯誤,這是因為mysql_query采用的是查詢全部結果然后把結果集全部緩存到內存中的方式。
mysql的查詢還提供了另外一種查詢方式,函數名為mysql_unbuffered_query,這個函數采用的是查出結果后立即操作結果集,并不會把結果集緩存到內存中,這樣就避免了超出內存的情況發生。但是使用這個方法的代價就是不能再查詢的時候使用獲取總行之類的方法,因為這種方法是便查詢邊返回結果。同時在使用該方法的時候不能在同一數據庫鏈接上執行其他的操作,想要執行其他操作的時候必須先終止當前操作,釋放所有未緩存的sql查詢所產生的結果行,或者重新實例化一個數據庫連接,使用新鏈接進行其他操作。
以下是使用緩存和不使用緩存的對比(所查詢的表中有1000多萬行數據):
function selecttest()try {$pdo = new PDO("mysql:host=localhost;dbname=test", 'root', '123456');// 不使用緩存結果集方式// $pdo- setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);$sth = $pdo- prepare('select * from test');$sth- execute();echo '最初占用內存大小:' . memory_get_usage() . "/n";$i = 0;while ($result = $sth- fetch(PDO::FETCH_ASSOC)) {$i += 1;if ($i 10) {break;sleep(1);print_r($result);echo '占用內存大小:' . memory_get_usage() . "/n";} catch (Exception $e) {echo $e- getMessage();}上面使用到的是緩存所有結果集的方式,運行該函數時將會報超內存的錯誤,如下所示:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 204800000 bytes) in E:/ProgramDevelopment/RuntimeEnvironment/xampp/htdocs/test/test.php on line 57Call Stack:
0.0005 135392 1. {main}() E:/ProgramDevelopment/RuntimeEnvironment/xampp/htdocs/test/test.php:0
0.0005 135568 2. test- selecttest() E:/ProgramDevelopment/RuntimeEnvironment/xampp/htdocs/test/test.php:86
0.0055 142528 3. PDOStatement- execute() E:/ProgramDevelopment/RuntimeEnvironment/xampp/htdocs/test/test.php:57在執行$sth- execute();時超出內存限制;
將// $pdo- setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);這行的注釋去掉后將使用不緩存結果集的方式,運行該函數將輸出以下內容:
最初占用內存大小:144808Array[id] = 1[a] = v[b] = w[c] = i)占用內存大小:145544Array[id] = 2[a] = b[b] = l[c] = q)占用內存大小:145544Array[id] = 3[a] = m[b] = p[c] = h)占用內存大小:145536Array[id] = 4[a] = j[b] = i[c] = b)占用內存大小:145536Array[id] = 5[a] = q[b] = g[c] = g)占用內存大小:145536可以看到,使用不緩存結果集的方式獲取一行結果所占用的內存是極少的。這樣就結局了超出內存限制的問題。
PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长兴县| 桐梓县| 永兴县| 凤翔县| 定安县| 聊城市| 黑龙江省| 商南县| 云林县| 西和县| 英超| 柞水县| 龙泉市| 文安县| 甘泉县| 安阳县| 绥滨县| 高雄市| 中阳县| 弥勒县| 将乐县| 康定县| 张家川| 漳平市| 金寨县| 徐闻县| 麦盖提县| 方正县| 色达县| 曲麻莱县| 杭锦旗| 通州区| 东城区| 华蓥市| 毕节市| 罗源县| 高陵县| 永嘉县| 鄂州市| 新平| 教育|