PHP クエリによって返されるデータが大きすぎるため、CSV ファイルのインポートが非常に遅くなります。
怪我咯
怪我咯 2017-05-17 09:55:57
0
2
705

フレームワークは ci を使用し、データベースは sqlsrv (SQL Server 2008) です。SQL クエリによって返された結果セットには 20,000 個のデータがあります。この SQL ステートメントを ci フレームワークで実行すると、Web ページが回転し続けます。20,000 個必要なデータ量は約 30 秒かかりますが、SQL Server 2008 R2 では SQL ステートメントは数秒で実行されます。CI で組み込みのクエリ SQL を使用する場合、実行時間は 200 ミリ秒です。つまり、ステートメントは実行されません。遅い。個人的には、返されるデータが多すぎて遅すぎると思います。20,000 個のデータと約 20 フィールドが返されます。統計を行ったり、データを CSV ファイルにエクスポートしたりするため、データが大量にあります。どうすればよいですか?私はこれに対処しますか?
私の SQL ステートメントは select * from table where create_time between 'xxxx-xx-xx 00:00:00' and 'xxxx-xx-xx 23:59:59'; これは、ユーザーがを選択します 時間範囲が小さい場合、データは少なくなります。範囲が大きい場合、データは大きくなります。データが大きい場合、非常に遅くなります。

パブリック関数 aa(){

リーリー

}
これはすでに最も単純なクエリです。SQL ステートメントは数秒でチェックできますが、ブラウザで実行すると非常に時間がかかります。
ブラウザで実行します。クエリ結果が数十の場合何千ものデータがあれば、ブラウザは回転し続けるのに 40 秒以上かかります。500 個のデータであれば 3 ~ 4 秒かかります。

result_array() ステップのループに時間がかかりすぎるのではないかと疑問に思っています。数万のレコードと 20 のフィールドがあります

==============2017-05-16 16:01 更新===============

CI は使用しませんでしたCI フレームワークのドキュメントを参照すると、result_array() を使用して、次の段落を目にしました:
多くの場合、データベース接続 ID または結果 ID を指定する必要があります。接続 ID は次のようになります
リーリー

結果 ID は、次のように、クエリによって返された結果オブジェクトから取得できます。 リーリー

そこで、 result_id を使用してループ内の各レコードを読み取るようにコードを変更しました。

$sql ="select xxx";

$query=$this->db->query($sql) ;
//ここでは sqlsrv を使用しているため、sqlsrv_fetch_array を使用してループ内の各行を読み取ります。
//次に、各行を読み取った後に csv ファイルを書き込みます。
while($row=sqlsrv_fetch_array($query ->) ;result_id,SQLSRV_FETCH_ASSOC)){
//CSV ファイルに行を書き込むコードは次のとおりです
}

具体的なコードは次のとおりです

リーリー

この方法でファイルはエクスポートできますが、19204 行を見ると、16 列の CSV ファイルは約 3M です。エクスポートには 40 ~ 45 秒かかります。この時間をもっと速く最適化できないかどうかを尋ねたいです。

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信(2)
大家讲道理

これは、すべてのデータを Excel にエクスポートする方法です。 Excel に書き込む前に、データをチェックアウトする必要があります。私は通常、バックグラウンド プロセスを使用してデータをエクスポートし、電子メールに送信します。

いいねを押す +0
给我你的怀抱

いくつかのアイデアを提供してください:

  • フロントエンドには複数の時間範囲から選択する必要があり、バックエンドはこれらの時間範囲に従ってタスクを定期的に実行してデータベースを取得し、それを静的ファイルとしてサーバーに配置し、timemodified フィールドをバインドします。

  • テーブルが追加、削除、または変更されるたびに、スケジュールされた更新タスクがトリガーされます。スケジュールされたタスクの更新は、夜間など、毎日比較的顧客数が少ない時間帯に実行することもできます。

    エクスポートするたびに、比較
  • が同じであれば、以前にエクスポートした静的ファイルを取得できます。それらが等しくない場合は、その場で更新する必要がありますが、このような状況は比較的まれです。 ;
  • timemodified

    データベースからデータを取得する操作は、お客様の使用に影響を与えません。お役に立てれば幸いです
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!