パフォーマンスと効率は、PHPを使用してMySQLデータベースを操作する場合、特に大規模なクエリの結果を処理する場合の重要な考慮事項です。 mysqli_result :: $ lengthsは、現在の結果セットで各フィールドのデータ長を取得するmysqli拡張機能の属性です。データの読み取りと処理のプロセスを最適化し、プログラムの実行効率を改善するのに合理的に役立ちます。
$ lengthsは、配列を返すmysqli_resultオブジェクトの属性であり、配列の各要素は現在の結果行の対応するフィールドのバイト長に対応します。その典型的な使用シナリオは、 mysqli_stmt :: fetchやmysqli_result :: fetch_rowなどの方法と組み合わせて使用することです。これにより、フィールドデータサイズを正確に取得し、不明なフィールドコンテンツの長さによって引き起こされる追加のメモリオーバーヘッドを回避できます。
データの正確な長さを知ることは、大きなテキスト、大きなバイナリデータ(BLOB)、または不規則な長さを含むフィールドを処理する場合に役立ちます。
不必要な文字列の切り捨てまたは拡張を避けてください。
メモリ管理を最適化して、キャッシュスペースが大きすぎたり小さすぎたりしないようにします。
ストリーミング読み取りデータは正確な境界を提供し、重複した読み取りを減らします。
次の例は、ビッグデータを処理して効率を確保する際にデータを読み取り、処理するために$の長さを組み合わせる方法を示しています。
<?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
if ($mysqli->connect_errno) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
$query = "SELECT id, large_text_column FROM big_table";
$result = $mysqli->query($query);
if ($result === false) {
die("クエリに失敗しました: " . $mysqli->error);
}
// 結果セットを繰り返します,使用 lengths 各フィールドのバイトの長さを取得します
while ($row = $result->fetch_row()) {
// $result->lengths 現在の行のすべてのフィールドの長さ配列です
$lengths = $result->lengths;
// たとえば、get large_text_column フィールドの長さ(それが2番目のフィールドであると仮定します)
$textLength = $lengths[1];
// 長さでフィールドの処理を制御します
$largeText = substr($row[1], 0, $textLength);
// ここでは大丈夫です $largeText さらに処理します,たとえば、ファイルへの書き込み,またはストリーミング
echo "ID: " . $row[0] . " - テキストの長さ: " . $textLength . "\n";
}
$result->free();
$mysqli->close();
?>
現在のラインの各フィールドのバイト長を$ result-> lengthsで取得し、文字列長の計算の追加オーバーヘッドを避けます。
大規模なテキストフィールドの場合、 $ lengthsを直接使用すると、データの長さを正確に読み取り、文字をエンコードする違いのために不正確な長さの判断を避けることができます。
substrなどの関数を組み合わせると、より細かいメモリ管理とデータスライスを行うことができます。
バッファーされていないクエリを使用します。特に大きな結果セットの場合、バッファーされていないクエリ( mysqli_use_result )を使用すると、メモリの使用量を削減し、 $ lengsでより良く動作できます。
不要なデータ送信を避けてください。送信圧力を下げるために必要なフィールドのみを照会します。
大きなフィールドのストリーミング:ブロブまたは大きなテキストを処理するときは、1回限りの読み込みではなく、ストリーミングの読み取りを検討してください。
mysqli_result :: $ lengthsは、 phpがmysqlを操作する場合、詳細ではあるが非常に有用な特性です。特に、大規模なデータクエリの結果を扱う場合、データの長さとメモリの割り当てを正確に制御し、プログラムのパフォーマンスを改善できます。バッファーされていないクエリとストリーミング処理により、その利点をよりよく再生できます。