入力制限でインポート時間を縮める?
場合によるけど、いらないものが多い場合、制限は制限、自動入力は自動入力で分けた方がいいって話
テストデータとこれまでの話
44万行の固定長データがあり、必要なのは1.2万データ
【1】44万読んで、いらないのを消す
【2】44万読んで、必要なのを別テーブルにインポート
で。私はいったん2の方法をやってて、44万読むときに自動入力で固定長を分解していた。(8項目に分解)
なお、この時点でこのファイルを読む時間は概ね109秒
ふと、入力制限したらいいのではと思う。
データ行の前3桁で判定ができる。
テスト インポートそのものと自動入力結果での制限
【1】データ行3桁に対して制限 ・・・109秒
【2】データ行から自動入力された項目を値一覧で制限・・・105秒
【3】↑の値一覧を100レコードぐらいあるところから作った値一覧で・・・105秒
1で門前払いされてくれたらと思ったが、秒数あんま変わらんところを見ると、入力した時点で自動入力が走ってるから、1に対しても他8項目の自動入力のコストがかかってると見える。
(44万の登録時とあまり変わらんから)
テスト 1行データの読み込む時間と、デフォの自動入力フィールド
って、事は、行だけ先に取り込んだ方が実際にファイルをなめる時間がわかる。なめた結果1.2万取り込む時間
【1】作成者とかの5フィールドおまけ付 ・・・38秒
【2】行1フィールドのみ・・・23秒
38-23=15秒
15秒÷5÷1.2万=0.00025
(インポートと同時の自動入力1フィールドにかかるコスト?)
さておき
2をやってから、行+8項目自動入力テーブルにインポート
2の時間・・・23秒
インポートまでの時間・・・26秒
なんと、レコード作って自動入力にかかった時間が3秒である。
3秒÷8÷1.2万=0.0000312(↑と桁がちゃう)
気になるので、44万制限せずにまるごとやってみた。
2の時間・・・10秒
インポートまでの時間・・・121秒
レコード作って自動入力にかかった時間 111秒
111秒÷8÷44万=0.0000315(同じぐらいだな!)
2の差は13秒 これは制限の計算をしてるからだろう。
じゃ。ここを縮める為には
10秒で読んで削除すればいいんじゃねてなる。
読み込み 24
検索まで 24.294
削除まで 46.364
全部で49秒
あれなんで24秒?・・・・
ってなって、解ったことが・・・
よく見たら検索までが早いな?w(索引ないから時間かかると思ってた)
※この削除をする為に一回検索した事で、索引設定が変わった。
一度索引が作られたフィールドは、インポートする時に索引を作りながらインポートをしてしまうから遅くなる。
という事なのだろう。
そう考えると、作った当初は早くて、後から遅くなるっていうのはこういうのが起因してるんだろうなと理解できる。(14秒増えるしな)
裏どりとしては、索引なしにしてもっかい読むと10秒なので。
多分間違いない。
運用で何回も使うって考えると、削除方式は索引作るし削除に時間がかかるしあんまりよくないなと思った。
ちな、データ行だけ10秒で読んで、レコード→レコードの時に制限かけても131秒だったので、制限かけつつ自動入力は結局自動入力分のコストがかかるのでいまいちってのはテキストファイルからも、FMファイルからも同じだったので、そういう事なのである。
当初から3分の1になる。この差はデカい
で、最終的にどうしたか?
今回の場合、制限する数字はほぼ変わる事はないんだけど
変わった時に制限計算式を書き換える?って思うとそこも気になって。
この制限値は、フィールドから取れるので、それを値一覧にして制限しようと。
これで、読み込みまで29秒(6秒増)
レコード作ってインポートまで 32秒
109秒が32秒になったしこれでええなって感じ。
↑なお索引作るとやっぱり読み込みまでが1秒増える。
つい、データ確認とかで検索して知らずに索引作る設定にしちゃう事もあると思うので、場合によりインポートのフィールドはこのチェック外しておかないとなと気付いた今回だった。
インポートひとつでも運用コスト考えてやるの大事だね!!!
この記事が気に入ったらサポートをしてみませんか?