mysql 大數(shù)據(jù)量查詢

1 內(nèi)存耗盡問(wèn)題

Allowed memory size of xxx bytes exhausted

查詢大量數(shù)據(jù)的,如果出現(xiàn)如下情況,就說(shuō)明最大內(nèi)存已經(jīng)耗盡:

普通解決方案

可臨時(shí)修改腳本使用內(nèi)存大小進(jìn)行處理:

 ini_set ( 'memory_limit' , '2048M' );

2 內(nèi)存到達(dá)瓶頸之后就需要考慮采用非緩沖模式了

緩沖模式

  • 默認(rèn)情況下,查詢使用緩沖模式

  • 數(shù)據(jù)庫(kù)的查詢結(jié)果會(huì)從Mysql服務(wù)器傳輸?shù)絇HP,保存在進(jìn)程內(nèi)存中.而且結(jié)果集在沒(méi)有釋放之前需要相當(dāng)多的內(nèi)存來(lái)保存,空間換速度.

  • 緩沖模式由于整個(gè)結(jié)果集一次存儲(chǔ),所以很方便的進(jìn)行計(jì)數(shù),遍歷,指針移動(dòng)等操作.

注意:
當(dāng)使用libmysqlclient作為庫(kù)時(shí),PHP的內(nèi)存限制將不會(huì)計(jì)算用于結(jié)果集的內(nèi)存,除非將數(shù)據(jù)讀入PHP變量。與mysqlnd的內(nèi)存占用將包括完整的結(jié)果集。

無(wú)緩沖模式

  • 無(wú)緩沖的MySQL查詢執(zhí)行查詢,同時(shí)數(shù)據(jù)等待從MySQL服務(wù)器進(jìn)行獲取。
  • PHP端使用較少的內(nèi)存,但增加服務(wù)器上的負(fù)載。

由于緩沖查詢是默認(rèn)的,下面的示例將演示如何使用每個(gè)API執(zhí)行無(wú)緩沖的查詢。

無(wú)緩沖查詢示例:mysqli

<?php
$mysqli  = new mysqli("localhost", "my_user", "my_password", "world");
$uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);

if ($uresult) {
   while ($row = $uresult->fetch_assoc()) {
       echo $row['Name'] . PHP_EOL;
   }
}
$uresult->close();
?>

無(wú)緩沖查詢示例:pdo_mysql

<?php
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

$uresult = $pdo->query("SELECT Name FROM City");
if ($uresult) {
   while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
       echo $row['Name'] . PHP_EOL;
   }
}
?>

無(wú)緩沖查詢示例:mysql

<?php
$conn = mysql_connect("localhost", "my_user", "my_pass");
$db   = mysql_select_db("world");

$uresult = mysql_unbuffered_query("SELECT Name FROM City");
if ($uresult) {
   while ($row = mysql_fetch_assoc($uresult)) {
       echo $row['Name'] . PHP_EOL;
   }
}
?>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 看了一些關(guān)于MySQL查詢的優(yōu)化方法,發(fā)現(xiàn)MySQL的優(yōu)化最離不開(kāi)的就是索引,還有其他優(yōu)化的小建議。 查詢方法: ...
    鄭在學(xué)_blog閱讀 9,294評(píng)論 0 1
  • 如今隨著互聯(lián)網(wǎng)的發(fā)展,數(shù)據(jù)的量級(jí)也是撐指數(shù)的增長(zhǎng),從GB到TB到PB。對(duì)數(shù)據(jù)的各種操作也是愈加的困難,傳統(tǒng)的關(guān)系性...
    CaesarXia閱讀 12,088評(píng)論 1 30
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,688評(píng)論 19 139
  • 寫在前面: 之所以有這種想法,是因?yàn)樵诰W(wǎng)上看了一篇帖子。具體內(nèi)容記不清了,大意是說(shuō)卸載微信之類的社交軟件之后,一個(gè)...
    江厘閱讀 988評(píng)論 10 8
  • 小時(shí)候我很叛逆,也不知道為什么老哭,老氣人。媽媽也挺能發(fā)狠的。都不知道被媽媽一只手拎著扔進(jìn)村口那個(gè)廢棄的干涸了的大...
    稚童千陽(yáng)閱讀 254評(píng)論 0 0

友情鏈接更多精彩內(nèi)容