問題タブ [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 投票する
7 に答える
28372 参照

sql - SQL Server 2000 削除トップ (1000)

約 4,500 万レコードのテーブルを持つ大規模な SQL Server データベースがあります。このテーブルをアーカイブしていますが、2 年以上前のすべてのエントリを削除する必要があります。アーカイブ テーブルへの挿入は正常に機能していますが、削除時の効率に問題があります。

私の問題は、現在テーブルにあるインデックスにあります。1000 レコード チャンクで削除 (およびアーカイブの挿入) したいと思います。これを行うには、要件を満たす "上位" 1000 件のレコード (2 年以上前) を特定する必要があります。行の DateTime スタンプはクラスター化されたインデックスであるため、これは行を取得するのに最適です。ただし、SQL 2000 では DELETE TOP 1000 が許可されていないため、次のようにする必要があります。

UniqueID がインデックス化されている場合、これはうまく機能します。そうでないため、これには非常に長い時間がかかります (削除される 1000 レコードごとにテーブルをスキャンしています)。テーブルには、レコードを一意に識別する他のインデックスはありません。これはライブ DB であるため、UniqueID でインデックスを計算するにはコストがかかりすぎると言われています。このクエリを最適化する方法を誰か指摘できますか?

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

mysql - WHERE条件の別のテーブルをJOINで使用したSQLDELETE

guide_categoryテーブルと関係のない行guide(デッドリレーション)を削除する必要があります。

これが私がやりたいことですが、もちろんそれは機能しません。

エラー:

FROM句で更新するターゲットテーブル'guide_category'を指定することはできません

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

mysql - MySQL 削除ステートメントの最適化

かなり巨大なテーブル (~100 GB) に対して実行する削除クエリがいくつかあり、それらを可能な限り最適化したい:

column1 はdatetime列です。この列のインデックスを作成すると、削除が高速化されると思います。それ以外に、ここで何かできることはありますか? 関数を使用するdate_sub()とクエリが遅くなりますか? クエリを実行する前にその値を計算する必要がありますか?

column2 は table2 の主キーであるため、mysql のドキュメントによると、既にインデックスになっています。私の質問は次のとおりです。インデックスの種類はPRIMARY、それは と同じINDEXですか? INDEX高速化のために別のインデックスを作成する必要がありますか?

table3 には、column3 と column4 の複合主キーがあります。主キーのインデックスはありますが、削除クエリは列 4 を使用しないため、列 3 だけに別のインデックスを作成する必要がありますか? または結合された主キーがそれを行うでしょうか?

これらはかなり基本的な質問だと思いますが、私の状況に固有の明確な答えが見つからなかったので、助けていただければ幸いです!

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

sql - SQL Server 2005 の効率的な削除

当面の問題は、このテーブルを使用する他のプロセスでデッドロックを引き起こすことなく、テーブルから約 60M のレコードを削除する必要があることです。この時点で、一度に約 1M のレコードしか処理しない while ループを使用してレコードを削除する作業がほぼ完了しましたが、それには 1 日かかります。

Q1: テーブルをオンラインに保ち、MS SQL Server 2005 でこのテーブルを使用する必要がある他のリソースへの影響を最小限に抑えながら、テーブルから大量のデータを削除する最適な方法は何ですか?

Q2: Oracle のように、SQL Server で個別の行ロック (テーブル ロックではなく) を実装する方法はありますか? (これに答えるとQ1に答えるかもしれないことに注意してください)。

A2: @Remus Rusanu が教えてくれたように、削除で行レベルのロックを行う方法があります。

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

mysql - テーブルからデータを削除し、2つのテーブルを結合します

私はかなり機密性の高いデータを扱っているので、それが適切に行われていることを絶対に確信したいと思います。

別のテーブルに関連付けられているテーブルの行を削除しようとしています

テーブルを関連付ける唯一の方法は、他の2つのテーブルを結合することです...

正確なクエリは次のとおりです。

ご覧のとおり、きれいではありません。

MySQLクエリブラウザを介して奇妙なエラーが発生しています...

MULTIDELETEの不明なテーブル'Transaction_Amount'

私はmysqlのマニュアルを読んでみましたが、これは私にはうまくいくはずです...誰かが何か考えを持っていますか?

0 投票する
6 に答える
615 参照

mysql - 削除クエリの SQL

プログラム用の SQL クエリを作成しようとしていますが、方法がわかりません。私は十分なSQLを知りません。

オンライン チーム システムを実装しようとしています (一部の Web サイト用)。私は2つのテーブルを持っています:

teammembersここで、対応するイベント IDが 1 であるすべてのレコードを削除する必要がありteamIdます。

私はしようとしています:

これが本当に私がやろうとしていることをしているのかどうかはわかりません。

このクエリは間違っていますか?もしそうなら (おそらくそうです)、どうすればそのようなクエリを書くことができますか?

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

sql-server - インデックスによってSQLサーバーの削除が大幅に遅くなる

入力された日付に基づいて大規模な (〜 50m レコード DB) から行を削除するアーカイブ スクリプトを実行しています。日付フィールドは、テーブルのクラスター化インデックスであるため、条件ステートメントを適用しています。

この削除を while ループで実行し、バッチで 1000 から 100,000 のレコードを試しています。バッチサイズに関係なく、驚くほど遅いです。1 分間に 10,000 件のレコードが削除されます。実行計画を見ると、「Index Delete」に多くの時間が費やされています。テーブルには約 15 のフィールドがあり、そのうちの約 10 には何らかのインデックスがあります。この問題を回避する方法はありますか? 各インデックスの削除になぜそんなに時間がかかるのかさえわかりません。誰かがここで何が起こっているのかを正確に明らかにすることができますか? これは私の実行計画のサンプルです:

代替テキスト http://img94.imageshack.us/img94/1006/indexdelete.png

(シーケンスは削除コマンドを指します)

このデータベースはライブであり、頻繁に挿入されています。そのため、サイズをトリミングするためにコピーと切り捨ての方法を使用することをためらっています。ここで見逃している他のオプションはありますか?

0 投票する
7 に答える
28810 参照

sql-server - SQLServerで大量のデータを削除する

10000000レコードのテーブルがあるとします。この2つのソリューションの違いは何ですか?

  1. 次のようなデータを削除します:

    /li>
  2. アプリケーションを含むすべてのデータを行ごとに削除します。

    /li>

最初のソリューションは最高のパフォーマンスを発揮しますか?ログとパフォーマンスにどのような影響がありますか?

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

mysql - MySQL は複数のテーブルから行を削除します

これは正しい方法ですか?

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

mysql - Doctrineを使用してMySQLデータベースで複数テーブルを削除する構文は何ですか?

Doctrineを使用して、複数のテーブルから収集したデータに基づいて、単一のテーブルのレコードを削除しようとしています。

「会社_グループ」は、「会社」を「グループ」にリンクする関連付けテーブルです。特定の会社にリンクされたこのテーブルのすべてのレコードを削除したいのですが、'public' グループにリンクされた 'companies_groups' レコードのみが削除されるという制限があります。

これを純粋な SQL で書くとしたら、次のようになります。

Doctrineで同等のものは何ですか? 私は今、1時間ほど苦労して実験しています。

現時点で私はこれを持っています:

(私の Doctrine モデルは、'company_groups' テーブルの 'Company_group' と 'groups' テーブルの 'Group' です)

次の SQL が生成されます。

生成された SQL では、DELETE と FROM の間に「companies_groups」がなく、修飾子が削除されていることがわかります (つまり、「id」があいまいになります)。

役立つ追加情報があれば教えてください。