現在の位置: ホーム> 最新記事一覧> ループでmysqli_result :: fetch_columnを使用してパフォーマンスの問題を回避する方法

ループでmysqli_result :: fetch_columnを使用してパフォーマンスの問題を回避する方法

gitbox 2025-05-26

mysqli_result :: fetch_columnとは何ですか?

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への頻繁な呼び出しは遅くなりますか?

理論的には、 fetch_columnは、基礎となるCコードから読み取られるデータの行をトリガーし、指定された列の値を返します。 1回の呼び出しのオーバーヘッドは非常に小さいですが、ループで多くのデータを繰り返し呼び出すと、蓄積されたオーバーヘッドが重要になります。

主な影響要因は次のとおりです。

  • データサイズ:データが多いほど、通話が多いほど、オーバーヘッドが大きくなります。

  • ネットワークレイテンシとデータベースのパフォーマンス:ネットワークリクエスト環境でデータが頻繁にプルされると、遅延が重ねられます。

  • クライアントの処理効率:PHPのループとメソッドは、それ自体もオーバーヘッドを持っています。

極端な例を示すために、数万のレコードを処理する場合、それぞれがFETCH_COLUMNを個別に呼び出すと、全体の応答時間が大幅に増加します。


最適化する方法は?

  1. すべてのデータを一度に取得します

データボリュームが許可されている場合は、一度に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>

  1. 必要な列のみを取ります

SQLクエリの必要なフィールドのみを選択して、データの送信と処理の量を減らしてください。

  1. ループで繰り返されるクエリを避けてください

同じデータを複数回使用する必要がある場合は、最初に結果をキャッシュして、SQLが複数回実行しないようにしてください。

  1. 前処理ステートメントを使用します

前処理ステートメントはより安全であり、多数の複雑なクエリに対してより良いパフォーマンスを発揮します。


まとめ

mysqli_result :: fetch_column in loopsで頻繁に使用するのはそれほど遅いことはありませんが、データ量が大きい場合、累積コールによってもたらされるオーバーヘッドは無視できません。メソッド呼び出しの数を減らし、一度にデータを取得し、SQLを合理的に設計することにより、パフォーマンスと応答速度を大幅に改善できます。

この記事が、PHPでのデータベースデータ抽出をよりよく理解し、最適化するのに役立つことを願っています。