FETCH_COLUMNは、PHP 8.1のMySQLI_RESULTクラスに追加された新しい方法です。結果セットで単一の列の値を直接取得し、追加の配列アクセスを回避するために使用されます。シンプルな構文があり、PDOのFetchColumnに似ています。使用の例は次のとおりです。
<code> $ mysqli = new mysqli( "gitbox.net"、 "user"、 "pass"、 "database"); $ result = $ mysqli-> query( "ユーザーから名前を選択"); while($ name = $ result-> fetch_column()){
echo $ name。 "\ n";
}
</code>
この例では、各ループは、 Fetch_Columnから現在の行の最初の列(デフォルトは0番目の列です)データを取得します。
理論的には、 fetch_columnは、基礎となるCコードから読み取られるデータの行をトリガーし、指定された列の値を返します。 1回の呼び出しのオーバーヘッドは非常に小さいですが、ループで多くのデータを繰り返し呼び出すと、蓄積されたオーバーヘッドが重要になります。
主な影響要因は次のとおりです。
データサイズ:データが多いほど、通話が多いほど、オーバーヘッドが大きくなります。
ネットワークレイテンシとデータベースのパフォーマンス:ネットワークリクエスト環境でデータが頻繁にプルされると、遅延が重ねられます。
クライアントの処理効率:PHPのループとメソッドは、それ自体もオーバーヘッドを持っています。
極端な例を示すために、数万のレコードを処理する場合、それぞれがFETCH_COLUMNを個別に呼び出すと、全体の応答時間が大幅に増加します。
すべてのデータを一度に取得します
データボリュームが許可されている場合は、一度にfetch_allまたはfetch_all(mysqli_num)を使用してからphpをループすることをお勧めします。これにより、複数のメソッド呼び出しとネットワークインタラクションのオーバーヘッドが削減されます。
例:
<code> $ result = $ mysqli-> query( "ユーザーから名前を選択"); $ allnames = $ result-> fetch_all(mysqli_num); foreach($ allnames as $ row){
echo $ row [0]。 "\ n";
}
</code>
必要な列のみを取ります
SQLクエリの必要なフィールドのみを選択して、データの送信と処理の量を減らしてください。
ループで繰り返されるクエリを避けてください
同じデータを複数回使用する必要がある場合は、最初に結果をキャッシュして、SQLが複数回実行しないようにしてください。
前処理ステートメントを使用します
前処理ステートメントはより安全であり、多数の複雑なクエリに対してより良いパフォーマンスを発揮します。
mysqli_result :: fetch_column in loopsで頻繁に使用するのはそれほど遅いことはありませんが、データ量が大きい場合、累積コールによってもたらされるオーバーヘッドは無視できません。メソッド呼び出しの数を減らし、一度にデータを取得し、SQLを合理的に設計することにより、パフォーマンスと応答速度を大幅に改善できます。
この記事が、PHPでのデータベースデータ抽出をよりよく理解し、最適化するのに役立つことを願っています。