別のテーブルの条件を見てレコード削除
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
bluemen
投稿数: 3
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
お世話になります。
参照用テーブルに抽出条件を設定し、その条件にあるレコードと
共通のキーを持つメインテーブルのレコードを削除しようと思っています。
(作業後は参照用テーブルからも削除)
現在メインは約25万件、参照用は約4万件あります。
参照用1レコードに対して、メイン側は数レコード該当します。
このような要件でメインのレコード削除が早く終わる方法を
教えて下さい。(色々やりましたがどれも遅くて...)
宜しくお願いします。
参照用テーブルに抽出条件を設定し、その条件にあるレコードと
共通のキーを持つメインテーブルのレコードを削除しようと思っています。
(作業後は参照用テーブルからも削除)
現在メインは約25万件、参照用は約4万件あります。
参照用1レコードに対して、メイン側は数レコード該当します。
このような要件でメインのレコード削除が早く終わる方法を
教えて下さい。(色々やりましたがどれも遅くて...)
宜しくお願いします。
投票数:0
平均点:0.00
sk0014
投稿数: 37
![半人前 半人前](../../uploads/rank3dbf8e94a6f72.gif)
参照用テーブル削除が親タスクで、メインテーブル削除が子タスクのツリー構造になっていると思いますが、その場合、肝心なのは、親タスクのDBテーブルでメインテーブルをオープンして置きます。
既にそうなっていますでしょうか?
MagicV9以降+SQLデータベースですと、組込みSQLでDELETE文を発行すれば、あっという間に終わるんですけどね。
既にそうなっていますでしょうか?
MagicV9以降+SQLデータベースですと、組込みSQLでDELETE文を発行すれば、あっという間に終わるんですけどね。
投票数:0
平均点:0.00
bluemen
投稿数: 3
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
sk0014さん
メイン削除がひとおおり終わってから、参照用を削除するつもりです。
なお件数を間違っていました。
(メンテ用DB見てました)
メイン削除がひとおおり終わってから、参照用を削除するつもりです。
なお件数を間違っていました。
(メンテ用DB見てました)
投票数:0
平均点:0.00
sk0014
投稿数: 37
![半人前 半人前](../../uploads/rank3dbf8e94a6f72.gif)
メインテーブル側の範囲付けをする為のキーは適切ですか?
あと、DBテーブルの共有=N(なし)、オープン=F(高速)
子タスクのタスク常駐=Yにするとかはどうですか?
あと、DBテーブルの共有=N(なし)、オープン=F(高速)
子タスクのタスク常駐=Yにするとかはどうですか?
投票数:0
平均点:0.00
bluemen
投稿数: 3
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
引用:
sk0014さん
どうも私の説明&理解が不十分のようで...
まず第一に参照用テーブルは今回削除しません。
その上でまず分からないのがどちらを上位タスクにするのかです。
私は件数が少なく照合キーに重複の無い参照用テーブルを親にし、
それを条件で絞り込んでから回して、
子タスクでそれに該当するメインテーブルのレコードを削除するように
作成しました。
しかし先輩は実際に消すメインテーブルを親にして参照用テーブルと
照合すべきと言いました。
このあたりまだ迷っています。
DBテーブルの設定は参照にさせていただきます。
sk0014さんは書きました:
メインテーブル側の範囲付けをする為のキーは適切ですか?
あと、DBテーブルの共有=N(なし)、オープン=F(高速)
子タスクのタスク常駐=Yにするとかはどうですか?
sk0014さん
どうも私の説明&理解が不十分のようで...
まず第一に参照用テーブルは今回削除しません。
その上でまず分からないのがどちらを上位タスクにするのかです。
私は件数が少なく照合キーに重複の無い参照用テーブルを親にし、
それを条件で絞り込んでから回して、
子タスクでそれに該当するメインテーブルのレコードを削除するように
作成しました。
しかし先輩は実際に消すメインテーブルを親にして参照用テーブルと
照合すべきと言いました。
このあたりまだ迷っています。
DBテーブルの設定は参照にさせていただきます。
投票数:0
平均点:0.00
sk0014
投稿数: 37
![半人前 半人前](../../uploads/rank3dbf8e94a6f72.gif)
メインテーブルを親タスクにしたら、全件チェックしなければならず、遅くなります。
bluemenさんの考え方の方が、常套手段です。
bluemenさんの考え方の方が、常套手段です。
投票数:1
平均点:10.00
Take
投稿数: 124
![一人前 一人前](../../uploads/rank3dbf8ea81e642.gif)
bluemenさん
必ずしもタスクを親子の構造にする必要はないかと思います。
メインのテーブルをバッチで処理するタスクの中で参照用テーブルをリンクし、レコード削除条件を設定すれば一つのタスクで処理可能なのではないでしょうか?
ただし、処理スピードについてはなんとも言えませんが...
必ずしもタスクを親子の構造にする必要はないかと思います。
メインのテーブルをバッチで処理するタスクの中で参照用テーブルをリンクし、レコード削除条件を設定すれば一つのタスクで処理可能なのではないでしょうか?
ただし、処理スピードについてはなんとも言えませんが...
投票数:0
平均点:0.00
kawabata
居住地: 群馬
投稿数: 86
![一人前 一人前](../../uploads/rank3dbf8ea81e642.gif)
こんにちは。
他のバージョンは分かりませんが、
V7の場合、子タスクのタスク常駐=Yに
不具合があったと記憶しております。
他のバージョンは分かりませんが、
V7の場合、子タスクのタスク常駐=Yに
不具合があったと記憶しております。
投票数:0
平均点:0.00
hiro
居住地: 三重
投稿数: 188
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
みなさん こんにちは
大量のデータ操作はインデックスが絡むと思います。
通常オープンの場合、削除毎にインデックスが編集されて時間がかかっていると思います。
オープンモードを再索引にして、削除後にインデックスの再作成を行うようにしてはどうでしょうか?
インデックスの再作成のメッセージがでますが・・
間違っていたら すいません
。
大量のデータ操作はインデックスが絡むと思います。
通常オープンの場合、削除毎にインデックスが編集されて時間がかかっていると思います。
オープンモードを再索引にして、削除後にインデックスの再作成を行うようにしてはどうでしょうか?
インデックスの再作成のメッセージがでますが・・
間違っていたら すいません
![](../../uploads/smil3dbd4d75edb5e.gif)
投票数:0
平均点:0.00