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

首頁 > 數據庫 > 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編程

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

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 会宁县| 崇左市| 瑞昌市| 监利县| 夏邑县| 五寨县| 安远县| 灵丘县| 玉林市| 湟源县| 饶阳县| 明溪县| 十堰市| 泸州市| 岑溪市| 汶上县| 临沭县| 图们市| 历史| 措勤县| 津市市| 兰考县| 玉门市| 建德市| 洛隆县| 宁化县| 双鸭山市| 云安县| 榆中县| 东乡族自治县| 石嘴山市| 通化市| 唐海县| 昌平区| 油尖旺区| 丹棱县| 涿州市| 武清区| 昆山市| 瓦房店市| 合水县|