問題タブ [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.
android - Android SQlITE データベースの一番上の行を削除
現在、プログラムに次のコードがあります。
正常に動作し、指定された行を削除します。ただし、テーブルの一番上にあるデータベースの最新 (最も古い日付) のエントリを削除できるように実装したいとも考えています。delete の最後の 2 つのパラメーターを変更することでこれを実行できることはわかっていますが、それらを何に変更すればよいかわかりません。
mysql - 参加時にmysqlを削除しますか?
使うことができます
上から一致する行を選択し、
両側で一致する行を削除するクエリを作成するにはどうすればよいですか?
何かのようなもの
sql - ロックせずに多くの行を削除する
PostgreSQLでは、次のようなクエリがあり、1mの行テーブルから25万行が削除されます。
クエリの実行には1時間以上かかり、その間、影響を受ける行は書き込み用にロックされます。これは、多くの更新クエリが大きな削除クエリが完了するのを待たなければならないことを意味するため、良くありません(その後、行が下から消えたために失敗しますが、それは問題ありません)。この大きなクエリを複数の部分に分割して、更新クエリへの干渉をできるだけ少なくする方法が必要です。たとえば、削除クエリをそれぞれ1000行のチャンクに分割できる場合、他の更新クエリは最大で1000行を含む削除クエリを待機する必要があります。
そのクエリはうまく機能しますが、残念ながらpostgresには存在しません。
sql - 4200万行のテーブルの相関サブクエリを使用してSQLを削除しますか?
cats
42,795,120 行のテーブルがあります。
どうやらこれは行数が多いようです。だから私がするとき:
クエリがタイムアウトします:(
(編集: 値を増やす必要があり CommandTimeout
ます。デフォルトはわずか 30 秒です)
TRUNCATE TABLE cats
他の飼い主から猫を吹き飛ばしたくないので使えません。
「リカバリ モデル」を「シンプル」に設定して SQL Server 2005 を使用しています。
だから、私はこのようなことをすることを考えました(ところでアプリケーションからこのSQLを実行します):
私の質問はDELETE
、SQL Server 2005 で使用できる行数のしきい値はどれくらいですか?
または、私のアプローチが最適でない場合は、より良いアプローチを提案してください。ありがとう。
この投稿は私を十分に助けませんでした:
編集 (2010 年 8 月 6 日):
さて、上記のリンクをもう一度読んだ後、これらのテーブルにインデックスがないことに気付きました。また、以下のコメントですでにその問題を指摘している人もいます。これは架空のスキーマでid_cat
あり、PK ではないことに注意してください。実際のスキーマでは、一意のフィールドではないためです。
インデックスを配置します:
cats.id_cat
owner_cats.id_cat
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 時間に増やします (
CommandTimeout=60000;
デフォルトは 30 秒) 。 - トムのクエリを使用:
DELETE FROM WHERE EXISTS (SELECT 1 ...)
少し高速に実行されたため DROP
削除ステートメントを実行する前のすべてのインデックスと PK (???)- 実行
DELETE
ステートメント CREATE
すべてのインデックスと PK
クレイジーに思えますが、少なくとも最初のロードを使用してTRUNCATE
最初からやり直すよりも高速です. 4200万行。(注: ロード プロセスが例外をスローした場合、最初からやり直しますが、以前の を吹き飛ばしたくないので、テーブルを使用したくないため、 を使用しようとしています。)owner_id
owner_id
owner_id
owner_id
TRUNCATE
owner_cats
DELETE
もう助けていただければ幸いです:)
sql - インデックスを使用すると、SQL Server DELETE が遅くなる
SQL Server 2005 データベースがあり、数百万行 (列が 3 つしかない)DELETE
のテーブルからのレコードの処理を高速化するために、適切なフィールドにインデックスを配置しようとしましたが、実行時間がさらに長くなりました! (例: 1 時間対 13 分)big_table
DELETE
テーブルとの間に関係があり、フィルター処理する列DELETE
は他のテーブルにあります。例えば
ところで、私も試しました:
最初のものよりもわずかに速く実行されているように見えますが、インデックスを使用すると、使用しない場合よりもはるかに遅くなります。
これらのフィールドにインデックスを作成しました。
big_table.id_product
small_table.id_product
small_table.id_category
.ldf ファイルは、.ldf ファイルの実行中に大きくなりDELETE
ます。
DELETE
テーブルにインデックスがあるとクエリが遅くなるのはなぜですか? 彼らはもっと速く走るべきだと思った。
アップデート
DELETE
さて、コンセンサスは、インデックスを更新する必要があるため、インデックスが大幅に遅くなるということです。DELETE
ただし、すべての行を一度にすべて取得できず、最後にインデックスを 1 回だけ更新できない理由はまだわかりません。
私はいくつかの読書から、句DELETE
内のフィールドの検索を高速化することでインデックスが高速化されるという印象を受けました。WHERE
「インデックスは、SELECT ステートメントの場合と同様に、DELETE および UPDATE コマンドでレコードを検索する場合にも機能します。」
ただし、記事の後半で、インデックスが多すぎるとパフォーマンスが低下する可能性があると述べています。
ボブの質問への回答:
- テーブル内の 5,500 万行
- 4,200 万行が削除されています
- 同様の
SELECT
ステートメントは実行されません (タイプ 'System.OutOfMemoryException' の例外がスローされました)。
次の2つのクエリを試しました:
SQL Server 2005 からの次のエラー メッセージで25 分間実行した後、両方とも失敗しました。
データベース サーバーは、7.5 GB RAM を搭載した古いデュアル コア Xeon マシンです。これは私のおもちゃのテストデータベースです:)ので、他には何も実行していません。
CREATE
インデックスを適切に機能させるために、インデックスを作成した後に何か特別なことをする必要がありますか?
java - 休止状態にしてすべて削除
Hibernate でテーブル内のすべての行を削除する最良の方法は何ですか?
コレクションを反復処理して呼び出すsession.delete()
と、私の知る限りでは実行されません。
別のオプションを使用session.createQuery("delete ...")
しても、永続化コンテキストには影響しません。
より良いバリアントがない場合、いつこれらのメソッドを使用する必要がありますか?
mysql - DELETEJOINのトラブル
エラーが発生します:#1064-SQL構文にエラーがあります。
DELETEをSELECTに置き換えると、正常に機能しますが
sql - SQL削除クエリがあります
2つのテーブルがあります。report(reportIdの主キーとmigratedというビットフィールドがあります)とreport_detail(reportIdの外部キーがあります)です。レポートテーブルで移行されたreportIdを持つreport_detailからすべての行を削除したい=1。これは、必要なすべての行を選択するselectクエリです。
この削除クエリは私が望むことをしますか、それとも私は何か間違ったことをしていますか?
mysql - 最大値に基づく行の削除
最大値に基づいて行を削除するように mySQL クエリを構成するにはどうすればよいですか。
私は試した
しかし、エラーが発生しましたか?