ここでは、is nullを使ったSQLのチューニング方法を紹介します。
is nullを使用するケース
例えば、empテーブルのbusyo_cdが10,20,30,40,50,nullのとき、busyo_cdが設定されていないデータを取得する場合です。
・is nullを使うケース
select * from emp where busyo_cd is null;
主に、項目が空、未設定のデータを検索するときに使います。
is nullを使ったSQLをチューニングする方法
ここからはis nullを使ったSQLのチューニング方法を紹介します。
is nullのSQLをチューニングするには、is nullをやめる必要があります。
is nullをやめる
is nullをやめるには、NULL値の代わりに何かデータを設定する方法があります。
例えば、NULL値の代わりに半角スペースを埋めたり、0を埋めたり、999999というような値やシステムや業務の仕様上絶対発生しないXXXXXXというような値を設定することで回避することが出来ます。
ただし、きちんとシステムの中でルールを決めておかないとシステムエラーや障害の原因になりやすいです。
データの変更が出来ない場合は、ファンクションインデックスとNVL関数の合わせ技も試すことが出来ます。
例えば、ファンクションインデックスの項目に、NVL(busyo_cd,0)としてしておきます。
そしてselect * from emp where NVL(busyo_cd,0) = 0とすることで、busyo_cdがNULLの値を0にしつつ、インデックス検索も行うことが出来ます。
ファンクションインデックス自体をあまり使っているケースを見たことがないので、現場では事前に確認が必要です。
最後に
nullデータを置き換えるというのは、データの変更を伴うので、アプリケーションの単体テストでは事足りず、テスト工数が大きくなり、現実には、変更できないケースも多いと思います。
そういったケースでは、他に改善できる箇所を探してチューニングすることになります。SQLのチューニングについては、「SELECT文のSQLチューニング方法まとめ」で詳しく解説していますので、ぜひ参考にしてください。