問題タブ [insert]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - SELECTの結果を取得してVALUES句にフィードすることは可能ですか?
たとえば、次のようなことを行う方法はありますか?
c# - C#で一括挿入ステートメントを生成する最良の方法は?
私はたくさんの同様のレコードをテーブルに挿入する必要があり、これを行うための良い/簡単な方法があるかどうか疑問に思いました。
大きな弦を作るのは簡単だと思いますが、もっと優雅な方法を見つけられるといいなと思っていました。
mysql - 「INSERT IGNORE」と「INSERT ... ON DUPLICATE KEY UPDATE」
多くの行を含むステートメントを実行しているINSERT
ときに、失敗の原因となる重複エントリをスキップしたいと考えています。いくつかの調査の後、私のオプションは次のいずれかを使用するようです。
ON DUPLICATE KEY UPDATE
これは、何らかのコストで不要な更新を意味する、またはINSERT IGNORE
予告なしに滑り込む他の種類の失敗への招待を意味します。
私はこれらの仮定で正しいですか?重複を引き起こす可能性のある行を単純にスキップして、他の行に進む最善の方法は何ですか?
sql - MySQLを使用して、値が別のテーブルに存在しないという条件でテーブルに挿入するにはどうすればよいですか?
MySQLデータベースがあり、挿入している特定の値が別のテーブルの値と一致しないと仮定して、1つのテーブルにいくつかの値を挿入したいと思います。
簡略化された/例の構造は次のとおりです。
'name'が'donotinvite'テーブルの'name'と単一のステートメントで一致しないと仮定して、'name'と'message'のペアを'invites'テーブルに条件付きで挿入することは可能ですか?
このようなもの、おそらく?
oracle - 間違った方法で Oracle に挿入する - どのように対処すればよいですか?
次のコードを見つけました。
PK のシーケンスを作成できますが、それを使用しない既存のコード (クラシック asp、このプロジェクトの一部ではない既存の asp.net アプリ) がたくさんあります。
私はそれを無視するべきですか、それとも既存のコードに入らずに修正する方法はありますか?
私は最善の選択肢はただ行うことだと考えています:
オプション?
java - java.util.Map/Set での挿入速度の最適化
項目の順序を指定して、java.util.Collection への挿入速度を最適化する方法はありますか?
例えば
この解決策は次のとおりです。
これよりも速くなりますか (順不同) ?
(そして、他のコレクションについても同じ質問: HashMap、hastable...)
ありがとう
database - オブジェクトが存在しない場合にのみ、休止状態を使用してデータベースにオブジェクトを挿入する
主キーとして user_id を持つマップされた User オブジェクトと、一意の制約を持つメール列があるとします。ユーザー オブジェクトが存在しない場合にのみ、ユーザー オブジェクトをユーザー テーブルに保存するプログラムが必要です。
挿入関数で次のことができます。
- 取引開始
- 指定されたメールを持つユーザーのクエリ
- 存在しない場合は、新しいユーザーを作成し、セッションを使用して保存します
- 失敗した場合はコミットまたはロールバック
2 つの問題があります。
- 2 つのクエリを実行するのはコストがかかります。プレーン SQL を使用していた場合は、「INSERT IGNORE」構文を使用する可能性がありますが、私の場合は休止状態の保存メソッドを使用し、最後に User オブジェクトを保持したいと考えています。それに対する解決策はありますか?
- 同時実行。アプリケーションの 2 つのインスタンスが同時に実行される可能性はありますか? どちらも同じ「mail」パラメータで「addUser」関数を使用します。1 つ目はフェーズ 2 を通過し、そのメールを持つユーザーを見つけられません。最初のインスタンスがまだユーザーを保存してコミットしていないため、2 番目のインスタンスもユーザーを見つけることなくフェーズ 2 を通過します。次に、最初のインスタンスがユーザーを保存してコミットし、その後、2 番目のインスタンスがユーザーを保存してコミットします。このユーザーには、最初のインスタンスのメールと同じメールが含まれます。もちろん、制約のために失敗します。何か不足していますか?
私が正しい場合、どうすればよいですか:
- それが起こらないことを願っています。
- トランザクションの開始時に、ユーザー テーブルを読み取りおよび書き込み用にロックします。
- 関数に try...except を追加すると、一意の制約例外が除外されます。例外がスローされた場合は、メールに従ってデータベースからユーザーを選択するだけです。
- 他の解決策...
performance - テーブルに多くのレコード (400K) がある場合、空の場合と比較して、挿入は 4 倍遅くなります。
(データベース: Oracle 10G R2)
100,000 レコードをテーブルに挿入するのに 1 分かかります。ただし、テーブルに既にいくつかのレコード (400K) が含まれている場合は、4 分 12 秒かかります。また、CPU 待機が急増し、「Free Buffer Waits」が非常に高くなります (dbconsole から)。
ここで何が起こっているか知っていますか?これは、テーブルのエクステントが頻繁に発生するためですか? これらのテーブルのエクステント サイズは 1,048,576 バイトです。DB がテーブル ストレージを拡張しようとしているような気がします。
私はこれについて本当に混乱しています。だから、どんな助けも素晴らしいでしょう!
これは挿入ステートメントです。
ここでのdstat出力 (CPU、IO、MEMORY、NET):
- 空のテーブルの挿入: http://pastebin.com/f40f50dbb
- 400K レコードのテーブル: http://pastebin.com/f48d8ebc7
からの出力v$buffer_pool_statistics
アップデート
このテーブルからインデックスを削除したところ、100K を 600K レコード テーブルに挿入してもパフォーマンスが大幅に向上しました (CPU 待機なしで 47 秒かかりました - dstat の出力http://pastebin.com/fbaccb10を参照)。