この記事は主にphpでのmysql操作バッファの使用法を紹介し、例の形でmysql操作バッファのスキルをより詳細に分析します。価値のある人や困っている友達はそれを参照してください
この記事の例では、php での mysql 操作バッファの使用法について説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:
php を mysql に接続するには、mysql、mysqli、pdo の 3 つの方法があります。どの方法で接続する場合でも、バッファを使用する場合と使用しない場合には違いがあります。
バッファを使用する、およびバッファを使用しないとはどういう意味ですか?
クライアントは mysql サーバーでクエリ操作を実行します。クエリ操作中に取得したデータの量が比較的大きい場合、クエリ結果はどこに配置されるべきですか?
それを置く場所は 2 つあります: クライアントのバッファーとサーバーのバッファーです。
ここで話しているバッファは、クエリ結果がサーバーから取得され、クライアントのバッファに配置されている場合、そのバッファを使用して呼び出します。サーバー側のバッファにまだ格納されている場合、バッファが使用されていない(アンバッファ)と言います。
バッファを使用する場合と使用しない場合の違いは何ですか?
主にメモリの点で、バッファを使用するとクライアントのメモリ負荷が増加します。返されるデータ結果が特に大きい場合、クライアントを呼び出す比較的大きなプロセス (実際には PHP プロセス) を占有する可能性があります。バッファを使用しないと、当然サーバーへの負荷が高くなります (ここでは、mysql サービスを提供するサーバーについて話しています)。
詳細については、MySQL 大量データをクエリする PHP のメモリ使用量分析を参照してください
PHPの3つのモードでバッファを使用するかどうかを設定するにはどうすればよいですか?
Mysql のデフォルトのクエリはバッファを使用します。バッファを使用しない場合は、mysql_unbuffer_query を使用する必要があります
mysqliのデフォルトクエリはバッファを使用しません。バッファを使用するには、MYSQLI_STORE_RESULTを設定する必要があります。
PDO のデフォルトのクエリはバッファを使用しません。バッファを使用するには、MYSQL_ATTR_USE_BUFFERED_QUERY を設定する必要があります。関連するコードはおおよそ次のとおりです:
?
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
$dbConfig = array( 'ホスト' => '10.128.11.101', 'ポート' => '3306', 'ユーザー' => 'テスト', 'パス' => 'テスト', 'db' => 'テスト', ); $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はバッファを使用します $res = mysql_query($sql, $db); $data = 配列(); while($row = mysql_fetch_row($res)) { $data[] = $row; } //mysql はバッファを使用しません $res = mysql_unbuffered_query($sql, $db); $data = 配列(); while($row = mysql_fetch_row($res)) { $data[] = $row; } mysql_close($db); //-----------mysqli----------// $db = mysqli_connect($dbConfig['host'], $dbConfig['user'], $dbConfig['pass'], $dbConfig['db']); //mysqli はバッファを使用しません $result = mysqli_query($db, $sql); $data = 配列(); while($row = $result->fetch_array()) { $data[] = $row; } // mysqli使用バッファ $result = mysqli_query($db, $sql, MYSQLI_STORE_RESULT); $data = 配列(); while($row = $result->fetch_array()) { $data[] = $row; } mysqli_free_result($result); mysqli_close($db); //----------pdo----------// $dsn = "mysql:dbname={$dbConfig['db']};host={$dbConfig['host']}"; $pdo = 新しい PDO($dsn, $dbConfig['user'], $dbConfig['pass']); // pdo バッファーを使用しません $stmt = $pdo->prepare($sql); $stmt->execute(); $data = 配列(); $data = $stmt->fetchAll(); // pdo使用バッファ $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); $stmt = $pdo->prepare($sql); $stmt->execute(); $data = 配列(); $data = $stmt->fetchAll(); |
後续
当然のことながら、データ量が非常に大きい場合、データの抽出と処理にバッチの使用を検討する人も多いため、バッファを使用するか、バッファを使用しないで mysql を使用するかが非常に重要です。ここで説明されている大家向けの php プログラムの設計が役立つことを望みます。
http://www.bkjia.com/PHPjc/970758.html