パソコンWO助け隊は今日も行く!! -6ページ目

パソコンWO助け隊は今日も行く!!

アイビーソフトパソコンWO助け隊のブログ

お疲れ様です!!

ごぶさたしておりました。

その節はいろいろとお世話になりました。


先日、ORACLEを使用したシステムのテストを行っていたところ

データ量の増加に伴い、処理実行時間が異常に遅くなる処理が、

出てきました。


遅くなっているSQLは以下のようなものです。
※あるデータ内で別の区分で同じコードが存在するかのチェック


select * from DENPYOTBL A
where A.KUBUN = '10'
and exists (
select * from DENPYOTBL B
where A.corpcd = B.corpcd
and substr(B.KUBUN,1,1) = '2'
and A.key = b.key)



実行計画で確認しても、COSTも高くなく、結合しているのは

「主キー」。


なぜ?なぜ??なぜ???


おっと、、、ORACLEさんの罠に嵌るところでした!


実はここの「KUBUN」部分ですが「SUBSTR」などを使用した場合

INDEXを使用せず、全件検索にいってしまうのです。


よって、この場合の修正としては「in」を使って、該当の区分を

全種類書く方がいいのです。


select * from DENPYOTBL A
where A.KUBUN = '10'
and exists (
select * from DENPYOTBL B
where A.corpcd = B.corpcd
and B.KUBUN in ('20','21','22')
and A.key = b.key)
(あくまで一例です。もっと良い書き方があったら教えて~!)


これによって、150万件のデータで6時間かかっても終わらなかった

処理が、わずか3分で終わるようになりました。


プログラム単体テストでは、見落としがちなこういったSQLマジック。

みなさまも気をつけてください!!


それでは!!


あらゆるお困りごとを解決するために今日もWO助け隊は行く!




弊社アイビーソフトでは、現在プログラマーを募集しております。


システム開発をする中で、いろいろな経験をしながら楽しみたい方、

自由な発想で、自社パッケージソフトを企画、作成に携わりたい方。


やる気と行動力と素直な心があれば、

経験値なんてすぐに上げることができます。


挑戦する。


そんな気持ちで、一緒に働きましょう!!


応募詳細はこちら



小さい会社ですが、いいところもたくさんあります。

それを、入社して見つけてください。

あなたの力でもっともっと楽しい場所にしてほしい!