a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > MySQL > 正文

php中mysql操作的buffer知識

2020-03-22 20:17:25
字體:
來源:轉載
供稿:網友
  • php與mysql的連接有三種方式,mysql,mysqli,pdo。不管使用哪種方式進行連接,都有使用buffer和不使用buffer的區別。

    什么叫使用buffer和不使用buffer呢?

    客戶端與mysql服務端進行查詢操作,查詢操作的時候如果獲取的數據量比較大,那個這個查詢結果放在哪里呢?

    有兩個地方可以放:客戶端的緩沖區和服務端的緩沖區。

    我們這里說的buffer指的是客戶端的緩沖區,如果查詢結果已經從服務端獲取回來了,放置在了客戶端的緩沖區,我們就稱之為使用buffer。如果還是存放在服務端的緩沖區的話,我們就說沒有使用buffer(unbuffer)。

    使用buffer和不使用buffer有什么區別?

    主要在內存方面,使用buffer會增加客戶端的內存壓力,當返回的數據結果特別大的時候可能會占用調用客戶端(實際就是一個php進程)比較大的進程。不使用buffer自然對服務端(這里說的是提供mysql服務的服務器)壓力更大。


    php中三種模式是如何設置是否使用buffer的?

    mysql默認的query是使用buffer的,而不使用buffer就需要使用mysql_unbuffer_query

    mysqli默認的query是不使用buffer的,要使用buffer就需要設置MYSQLI_STORE_RESULT

    pdo默認的quey是不使用buffer的,要使用buffer就需要設置MYSQL_ATTR_USE_BUFFERED_QUERY

    大致相關代碼如下:


    <?php$dbConfig = array(    'host' => '10.128.11.101',    'port' => '3306',    'user' => 'test',    'pass' => 'test',    'db' => 'test',); $sql = 'select * from so_topic_app'; //---------mysql----------//$db = mysql_connect($dbConfig['host'], $dbConfig['user'], $dbConfig['pass']);mysql_select_db($dbConfig['db'], $db);mysql_set_charset('utf8', $db);  // mysql使用buffer$res = mysql_query($sql, $db); $data = array();while($row = mysql_fetch_row($res)) {    $data[] = $row;}  // mysql不使用buffer$res = mysql_unbuffered_query($sql, $db); $data = array();while($row = mysql_fetch_row($res)) {    $data[] = $row;}  mysql_close($db);  //---------mysqli----------//$db = mysqli_connect($dbConfig['host'], $dbConfig['user'], $dbConfig['pass'], $dbConfig['db']); // mysqli不使用buffer$result = mysqli_query($db, $sql); $data = array();while($row = $result->fetch_array()) {    $data[] = $row;} // mysqli使用buffer$result = mysqli_query($db, $sql, MYSQLI_STORE_RESULT); $data = array();while($row = $result->fetch_array()) {    $data[] = $row;} mysqli_free_result($result);mysqli_close($db);  //---------pdo----------//$dsn = "mysql:dbname={$dbConfig['db']};host={$dbConfig['host']}";$pdo = new PDO($dsn, $dbConfig['user'], $dbConfig['pass']); // pdo不使用buffer$stmt = $pdo->prepare($sql);$stmt->execute();$data = array();$data = $stmt->fetchAll(); // pdo使用buffer$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);$stmt = $pdo->prepare($sql);$stmt->execute();$data = array();$data = $stmt->fetchAll();

    后續

    當然如果數據量非常大的話,大部分人還是會考慮使用分批次來提取和處理數據。所以實際上需要我們關注和使用mysql是使用buffer還是不使用buffer的場景非常少。

    PHP編程

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

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 中文字幕在线三区 | 日日操操 | 欧美午夜一区二区三区免费大片 | 国产伦精品一区二区 | 国产成人精品综合 | 99中文视频| 国产毛片一区二区 | 午夜av导航 | www.av视频 | 午夜视频一区二区 | 欧美卡一卡二 | 精品欧美乱码久久久久久 | 国产av一级毛片 | 国产伦精品一区二区三区视频网站 | 亚洲欧美中文日韩在线v日本 | 国产精品99精品久久免费 | 国产一区二区三区久久久久久久久 | 久草成人 | 欧美亚洲成人一区 | av大片| 久久综合久色欧美综合狠狠 | 91精品国产欧美一区二区 | 日韩成人精品视频 | av在线播放网站 | 日韩中文一区二区三区 | 亚洲小视频 | 91不卡| 中文字幕网在线 | 黄页免费看| 日韩成人在线视频 | 91精品国产91久久综合桃花 | 国产伊人99 | 久久噜噜噜精品国产亚洲综合 | 成人在线黄色 | 欧美久久久| 国产成人精品视频在线观看 | 毛片免费观看视频 | 欧美日本韩国一区二区 | 欧美日韩综合精品 | 999精品在线 | 欧美日韩一区在线 |