データベースのパフォーマンス改善について


昨日、今日と日本列島は各地で冷え込みが厳しくなり、この秋一番の冷え込みとなったところもあったようです。
盛岡も随分寒くなり、寒さもいよいよ本格的になってきました。
今年は寒くなるのも早いようで、10月初めには岩手山でも例年より早い初冠雪を記録しました。


先日、現在、抱えている業務の作業をしている際に『棚ぼた』的な発見がありました。
システムのパフォーマンス改善は以前から継続的に作業しており、以前、ブログにも載せましたが最近は別件対応のため一時休止状態でした。
パフォーマンス改善は、DBアクセス関連を中心に対応していたのですが、書籍を使って調べたり、ネットを検索したりといろいろ試していました。
今回は別件対応でしたので、パフォーマンスは意識せずにデータの抽出条件についてあれこれ試行錯誤を繰り返していたのですが、結構ボリュームのあるテーブルどうしをリンクしてデータ抽出を行っていました。
実行するたびに数分待たされ、何とかならないかとちょっといじってみました。
以下が、修正前と後の抽出文の概要です。
前)
SELECT * FROM TableA A
INNER JOIN TableB B ON A.code = B.code
WHERE A.code = 0001;
後)
SELECT * FROM TableA A
INNER JOIN TableB B ON A.code = B.code
WHERE A.code = 0001 AND B.code = 0001;
抽出条件を双方のテーブルに指定するようにしました。


これまでは片方に指定すれば双方に効いてくれるものと思っていましたし同じ条件を両方に指定しても無駄だと思っていました。
しかし、この修正により処理時間が半分以下となったのです。
まったく『目からウロコ』です。
当然と言えば当然の条件指定なのかもしれませんが思い込みで作っていたため何の疑問も持ちませんでした。
つくづく思いこみで仕事をしていたと実感させられました。

システムのパフォーマンス改善だけに限ったことではありませんが今回の発見を教訓に、もっと視野を広げ物事を判断していきたいと感じさせられました。