1

SQL テーブルに 10,000 行を超える行を挿入する必要がある PHP プロジェクトがあります。これらのデータはテーブルから取得され、いくつかの単純な条件についてチェックされ、毎月末に 2 番目のテーブルに挿入されます。

どうすればいいですか。

もっと明確にする必要があると思います。私は現在、PHP cronjob を使用して小さなバッチ (250 個の挿入) を転送していますが、正常に動作します。しかし、私はこれを行う必要があり、これが最も適切な方法です。

最も適切なものは何でしょう。

  1. 私が現在使用しているPHPでのCronjob
  2. ファイルへのエクスポートと一括インポート方法
  3. 直接転送するある種のストアド プロシージャ

またはその他。

4

5 に答える 5

3

挿入SQL ステートメントを使用します。:^ )

SQL Server 2012 のテーブルまたはビューに 1 つ以上の行を追加します。例については、「」を参照してください。

mssql_* 拡張機能の使用例。

$server = 'KALLESPC\SQLEXPRESS';
$link = mssql_connect($server, 'sa', 'phpfi');
mssql_query("INSERT INTO STUFF(id, value) VALUES ('".intval($id)."','".intval($value)."')");
于 2013-04-17T05:04:04.457 に答える
2

BULK INSERTを使用してください- これはまさにあなたが求めているもののために設計されており、挿入の速度を大幅に向上させます。

また、(実際にインデックスがない場合に備えて) インデックスの追加を検討することもできます - 一部のインデックス (ほとんどは主キーのインデックス) により、挿入のパフォーマンスが向上する場合があります。

レコードを挿入できる実際の速度は、正確なデータ、テーブル構造、および SQL サーバー自体のハードウェア/構成に依存するため、具体的な数値を示すことはできません。

于 2013-04-17T05:05:25.630 に答える
2

データが大きいため、処理用に 500 レコードのバッチを作成します。

それらの 500 バッチの状態を確認し、それまでに別の 500 バッチを準備し、最初のバッチを挿入して処理します。

これにより、SQL サーバーに負荷がかかりません。

このようにして、私は毎日40kレコードを処理しています。

于 2013-04-17T05:05:58.057 に答える
1

SQL Server は、1 回のバッチで 1000 を超えるレコードを挿入しません。挿入用に別のバッチを作成する必要があります。ここで私はあなたを助けるいくつかの代替案を提案しています.

ストアド プロシージャを 1 つ作成します。有効なデータ用と無効なデータ用の 2 つの一時テーブルを作成します。すべてのルールと検証を 1 つずつチェックし、それに基づいてデータをこの両方のテーブルに挿入します。

データが有効な場合は有効な一時テーブルに挿入し、そうでない場合は無効な一時テーブルに挿入します。

次に、merge ステートメントを使用して、要件に従ってすべてのデータをソース テーブルに挿入できます。

テーブル間で N 個のレコードを転送できるので、これで問題ないことを願っています

ありがとう。

于 2013-04-17T08:23:39.740 に答える
1

10000 行は巨大なデータではないため、複数の while を使用して実行できます。

$query1 = mssql_query("select top 10000 * from tblSource");
while ($sourcerow = mssql_fetch_object($query1)){
      mssql_query("insert into tblTarget (field1,field2,fieldn) values ($sourcerow->field1,$sourcerow->field2,$sourcerow->fieldn)");
}

これはうまくいくはずです

于 2013-04-17T05:22:14.003 に答える