問題タブ [sql-delete]

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.

0 投票する
1 に答える
4113 参照

android - Android SQlITE データベースの一番上の行を削除

現在、プログラムに次のコードがあります。

正常に動作し、指定された行を削除します。ただし、テーブルの一番上にあるデータベースの最新 (最も古い日付) のエントリを削除できるように実装したいとも考えています。delete の最後の 2 つのパラメーターを変更することでこれを実行できることはわかっていますが、それらを何に変更すればよいかわかりません。

0 投票する
2 に答える
920 参照

mysql - 参加時にmysqlを削除しますか?

使うことができます

上から一致する行を選択し、

両側で一致する行を削除するクエリを作成するにはどうすればよいですか?

何かのようなもの

0 投票する
3 に答える
13334 参照

sql - ロックせずに多くの行を削除する

PostgreSQLでは、次のようなクエリがあり、1mの行テーブルから25万行が削除されます。

クエリの実行には1時間以上かかり、その間、影響を受ける行は書き込み用にロックされます。これは、多くの更新クエリが大きな削除クエリが完了するのを待たなければならないことを意味するため、良くありません(その後、行が下から消えたために失敗しますが、それは問題ありません)。この大きなクエリを複数の部分に分割して、更新クエリへの干渉をできるだけ少なくする方法が必要です。たとえば、削除クエリをそれぞれ1000行のチャンクに分割できる場合、他の更新クエリは最大で1000行を含む削除クエリを待機する必要があります。

そのクエリはうまく機能しますが、残念ながらpostgresには存在しません。

0 投票する
9 に答える
25446 参照

sql - 4200万行のテーブルの相関サブクエリを使用してSQLを削除しますか?

cats42,795,120 行のテーブルがあります。

どうやらこれは行数が多いようです。だから私がするとき:

クエリがタイムアウトします:(

(編集: 値を増やす必要があり CommandTimeout ます。デフォルトはわずか 30 秒です)

TRUNCATE TABLE cats他の飼い主から猫を吹き飛ばしたくないので使えません。

「リカバリ モデル」を「シンプル」に設定して SQL Server 2005 を使用しています。

だから、私はこのようなことをすることを考えました(ところでアプリケーションからこのSQLを実行します):

私の質問はDELETE、SQL Server 2005 で使用できる行数のしきい値はどれくらいですか?

または、私のアプローチが最適でない場合は、より良いアプローチを提案してください。ありがとう。

この投稿は私を十分に助けませんでした:

編集 (2010 年 8 月 6 日):

さて、上記のリンクをもう一度読んだ後、これらのテーブルにインデックスがないことに気付きました。また、以下のコメントですでにその問題を指摘している人もいます。これは架空のスキーマでid_catあり、PK ではないことに注意してください。実際のスキーマでは、一意のフィールドではないためです。

インデックスを配置します:

  1. cats.id_cat
  2. owner_cats.id_cat
  3. owner_cats.id_owner

私はまだこのデータ ウェアハウジングのコツをつかんでいると思います。明らかに、すべてのJOINフィールドにインデックスが必要ですよね?

ただし、このバッチ ロード プロセスを実行するには数時間かかります。私はすでにそれをSqlBulkCopy(一度に42ミルではなく、チャンクで)やっています。いくつかのインデックスと PK があります。次の投稿を読んで、インデックスが一括コピーでも遅くなるという私の理論を確認しました。

そのためDROP、コピーの前にインデックスに移動し、コピーが完了したら再度インデックスを作成しますCREATE

ロード時間が長いため、これらの提案をテストするにはしばらく時間がかかります。結果とともにまた報告します。

更新 (2010 年 8 月 7 日):

トムは次のように提案しました。

それでもインデックスがない場合、4,200 万行の場合、上記の方法では 22:08 に対して 13:21 分: 秒かかりました。ただし、1,300 万行の場合、私の古い方法では 2:10 に対して 2:13 かかりました。これは素晴らしいアイデアですが、それでもインデックスを使用する必要があります。

更新 (2010 年 8 月 8 日):

何かがひどく間違っています!インデックスをオンにすると、上記の最初の削除クエリは 1:9 時間:分(はい、1 時間です!)対 22:08 分:秒および 13:21 分:秒対 2:10 分:秒で 4,200 万行とそれぞれ13ミリ行。インデックスを使って Tom のクエリを試してみますが、これは間違った方向に向かっています。助けてください。

更新 (2010 年 8 月 9 日):

Tom の削除には、42 万行の場合は 1:06 時間:分、1,300 万行の場合は 10:50 分:秒かかりましたが、それぞれ 13:21 分:秒と 2:13 分:秒でした。 桁違いにインデックスを使用すると、データベースの削除に時間がかかります! 私のデータベースの .mdf と .ldf が、最初の (42 ミル) の削除中に 3.5 GB から 40.6 GB に増加した理由はわかっていると思います。 私は何を間違っていますか?

更新 (2010 年 8 月 10 日):

他のオプションがないため、私は、うまくいかない解決策であると感じているものを思いつきました(できれば一時的なものです)

  1. データベース接続のタイムアウトを 1 時間に増やします (CommandTimeout=60000;デフォルトは 30 秒) 。
  2. トムのクエリを使用:DELETE FROM WHERE EXISTS (SELECT 1 ...)少し高速に実行されたため
  3. DROP削除ステートメントを実行する前のすべてのインデックスと PK (???)
  4. 実行DELETEステートメント
  5. CREATEすべてのインデックスと PK

クレイジーに思えますが、少なくとも最初のロードを使用してTRUNCATE最初からやり直すよりも高速です. 4200万行。(注: ロード プロセスが例外をスローした場合、最初からやり直しますが、以前の を吹き飛ばしたくないので、テーブルを使用したくないため、 を使用しようとしています。)owner_idowner_idowner_idowner_idTRUNCATEowner_catsDELETE

もう助けていただければ幸いです:)

0 投票する
5 に答える
21294 参照

sql - インデックスを使用すると、SQL Server DELETE が遅くなる

SQL Server 2005 データベースがあり、数百万行 (列が 3 つしかない)DELETEのテーブルからのレコードの処理を高速化するために、適切なフィールドにインデックスを配置しようとしましたが、実行時間がさらに長くなりました! (例: 1 時間対 13 分)big_tableDELETE

テーブルとの間に関係があり、フィルター処理する列DELETEは他のテーブルにあります。例えば

ところで、私も試しました:

最初のものよりもわずかに速く実行されているように見えますが、インデックスを使用すると、使用しない場合よりもはるかに遅くなります。

これらのフィールドにインデックスを作成しました。

  1. big_table.id_product
  2. small_table.id_product
  3. small_table.id_category

.ldf ファイルは、.ldf ファイルの実行中に大きくなりDELETEます。

DELETEテーブルにインデックスがあるとクエリが遅くなるのはなぜですか? 彼らはもっと速く走るべきだと思った。

アップデート

DELETEさて、コンセンサスは、インデックスを更新する必要があるため、インデックスが大幅に遅くなるということです。DELETEただし、すべての行を一度にすべて取得できず、最後にインデックスを 1 回だけ更新できない理由はまだわかりません。

私はいくつかの読書から、句DELETE内のフィールドの検索を高速化することでインデックスが高速化されるという印象を受けました。WHERE

Odetocode.com によると:

「インデックスは、SELECT ステートメントの場合と同様に、DELETE および UPDATE コマンドでレコードを検索する場合にも機能します。」

ただし、記事の後半で、インデックスが多すぎるとパフォーマンスが低下する可能性があると述べています。

ボブの質問への回答:

  1. テーブル内の 5,500 万行
  2. 4,200 万行が削除されています
  3. 同様のSELECTステートメントは実行されません (タイプ 'System.OutOfMemoryException' の例外がスローされました)。

次の2つのクエリを試しました:

SQL Server 2005 からの次のエラー メッセージで25 分間実行した後、両方とも失敗しました。

データベース サーバーは、7.5 GB RAM を搭載した古いデュアル コア Xeon マシンです。これは私のおもちゃのテストデータベースです:)ので、他には何も実行していません。

CREATEインデックスを適切に機能させるために、インデックスを作成した後に何か特別なことをする必要がありますか?

0 投票する
3 に答える
61001 参照

java - 休止状態にしてすべて削除

Hibernate でテーブル内のすべての行を削除する最良の方法は何ですか?

コレクションを反復処理して呼び出すsession.delete()と、私の知る限りでは実行されません。

別のオプションを使用session.createQuery("delete ...")しても、永続化コンテキストには影響しません。

より良いバリアントがない場合、いつこれらのメソッドを使用する必要がありますか?

0 投票する
3 に答える
166 参照

mysql - DELETEJOINのトラブル

エラーが発生します:#1064-SQL構文にエラーがあります。

DELETEをSELECTに置き換えると、正常に機能しますが

0 投票する
4 に答える
119 参照

sql - SQL削除クエリがあります

2つのテーブルがあります。report(reportIdの主キーとmigratedというビットフィールドがあります)とreport_detail(reportIdの外部キーがあります)です。レポートテーブルで移行されたreportIdを持つreport_detailからすべての行を削除したい=1。これは、必要なすべての行を選択するselectクエリです。

この削除クエリは私が望むことをしますか、それとも私は何か間違ったことをしていますか?

0 投票する
4 に答える
35296 参照

mysql - 最大値に基づく行の削除

最大値に基づいて行を削除するように mySQL クエリを構成するにはどうすればよいですか。

私は試した

しかし、エラーが発生しましたか?

0 投票する
4 に答える
1219 参照

mysql - マックスで削除

これは私の前の質問に基づいています。

私は次の表を持っています

表1

行 3 を削除するにはどうすればよいですか (名前 = サウンド、および最大位置)