過去の桐井戸端BBS (桐ver.8)
15314 大量データを削除しようとすると、大変な時間がかかる 山谷 2002/03/03-17:10
Ver3から愛用していまして、現在Ver8_SP6をWin98SE環境で使っています。
主に表形式で使っておりますが、MS社製の例のものと違って各データを視認しながら作業ができるので、
作業性が格段に良いと考えております。
このたび、会社の売上データを日別単品レベルで管理しようと考え、1か月分を試しにCSVから読込んで作成し、
併合条件などの設定を行なったところ、データ件数は98万件、サイズがリミットぎりぎりの400MBになってしまいました。
とりあえず、売上データのコードに商品マスタから品名その他を併合する作業も思ったほど時間がかからず
(それでも1時間弱)やれやれと思い、これを1月分として保存し、
リネームした本来のTBLを全行削除し、データ読込用のTBLを作成しようとし、その作業に取り掛かりました。
全行削除を開始したのが、本日(3月3日)の朝9時30分でした。
(小売業は日曜日が休めないもので・・・)現在午後5時ですが、削除のインジケータは33%にしか進んでいません。
併合などの速度については、過去ログで盛んに書き込みがありましたが、
全行削除の速度については、いろいろ探しましたが、ないようです。
どなたか、これくらい大きなデータを扱っていらっしゃる方がおいでででしたら、
ぜひ、高速化に対する実例をご教示いただければ幸いです。
OSは先述のとおりWin98SE、CPUはPenV400、メモリは128MBの環境です。
よろしくお願いいたします。
15315 Re:大量データの削除について jyuuyuu 2002/03/03-19:18
記事番号15314へのコメント
山谷さん 今晩は jyuuyuuといいます

該当ファイルを「XXXXX.tbl」と仮定します

@ファイル(F)→書き出し(W)→表の枠組(F)
 とし書き出しファイル名は「XXXXX_B.tbl」とします

A「XXXXX.tbl」をMOに採るか、リネームし

B「XXXXX_B.tbl」を「XXXXX.tbl」にリネームする

の手順でOKと思いますが・・・・

15316 Re:大量データの全削除(枠組みの書き出し) Ogo 2002/03/03-19:34
記事番号15314へのコメント

>どなたか、これくらい大きなデータを扱っていらっしゃる方がおいでででしたら、
>ぜひ、高速化に対する実例をご教示いただければ幸いです。

このような例の場合、全行のデータ削除はムダの極致です。

桐では、データ削除を行なっても「復活」が可能なように全データが保存されたままです。
従って整列の為の索引も含めて保存されるため、
全行削除を行なってもファイルサイズも一緒です(全く一緒か否かは確認していないが (^^;; )。
もちろん、その後に「表整理」を行なえば、これが解消されるわけですが、
この様な条件下では「表整理」にも膨大な時間が必要です。

という現象を理解できたら

 行削除 *,圧縮

の変わりには

 書き出し 枠組み,"ほにゃらら"

を行なう事が最善の方策です。

もちろん、その後で現在の表を破棄終了した後に、
その表ファイル自体をファイル削除してしまうのです。
最後に "ほにゃらら.tbl" を、元の表ファイルの名前に

リネームすることで "一丁上がり" ということです。

これの応用が「既に大量のデータが入っている表の定義を変更する」場合の時間短縮です。

この場合、同様に枠組みを書き出して、何もデータが存在しない表の定義を変更した後に、
最後に元表から全部データを読み込むという手順を使います。

# どちらの場合も、「まだ復活な可能な削除データ」が完全
# 削除になってしまい、復活不能になる点に注意。


15319 Re:大量データの全削除(枠組みの書き出し) 山谷 2002/03/04-10:37
記事番号15316へのコメント
皆様、さっそくのご教示有難うございました。
初めての書き込みで、果してコメントが出るだろうか心配だったのに、その日のうちにいただき感激しております。

枠組みの書出しですか。
こういうことがあったのか、と10年来のユーザーのくせにな〜んにも分かっていなかったことが恥ずかしい限りです。
最近のバージョンでできるようになったのかなぁ、などと思い、書棚の奥から取り出した手垢まみれのVer4の教則本をみたら、
ちゃんと書いてありました。
昔からあったんですね。

さっそく一括の書換えに取り掛かりました。
皆様どうもありがとうございます。
15323 Re:大量データの削除について MIT 2002/03/04-17:16
記事番号15314へのコメント
山谷さん

大量データの全行削除は皆さんの述べられている表の書き出し→枠組みが一般的だと思います。
私は一括処理などで作業用の表を全行削除する時に別フォルダに
予め同名で空の表を用意しておいてファイル複写コマンドを使っています。
つまり同名で上書きコピーですね。作業表専用のフォルダなどにしておくと管理も楽ですし、
一括処理中の記述もシンプルになります。

表の定義など変更する時は、この同名の空の表で行っておきます。
表が空なので定義の保存終了なども短時間で終了します。

定例的な処理の場合はこんな方法も有効かと思います。

私は桐で98万件ものデータを扱った事はありませんので、山谷さんの
投函が逆にとても参考になりました。MIT

戻る