CASE-Xとは、SQLチューニングにおいて、WHERE句でCASE文を使用し、既存のSQLのOR、IN、UNION、SubQuery、<>、!=など、主にORACLEのCBOでの実行PLANにおけるボトルネックになるような構文を、CASE構文で置き換え、オプティマイザのアクセスパスを最短(条件が真と評価された時点で、他の条件の評価を行なわない短絡論理和)となるように実行制御する、SQLチューニングのテクニックの仮称である。効果としてはSQLの実行PLANをシンプルにし、複数のオブジェクトに対するアクセス回数を減らしたり、INDEXスキャンを効率化させ、SQL文の実行速度を改善する。考案及び命名はDOA+コンソーシアムの会員である森下等が推進している。基本理論として{[真]OR[真]}は{(CASE WHEN 式 is 真 WHEN 式 is 真 ELSE 偽]) = 真の場合を真}とする事で論理和を成立させ、SQL文のOR句などを排除する方法である。これは複数の要素を選択肢とするIN句の優先度付けや、UNION及びSubQueryの論理和にも同様に適用可能であり、置き換えや廃止が可能である。また応用として、不等号で記述された{A<>B}や{A!=B}などINDEXスキャンを阻害する条件も、{(CASE WHEN A=B is 偽 ELSE 真) = 真の場合を真}とする事で不等号を排除し、INDEXにヒットさせる事ができる。要するに「嘘の嘘は誠」の理論である。これにより、オプティマイザに対して苦手な、WHERE句の排他条件を等価条件とみなさせ、アクセスパスを最適化させ、SQLチューニングを成功させることを目的としている。この一見、無駄に見える独特の論理により、UNIONを使用したSQL文をシンプルにしたり、実行PLANのアクセスパスをシンプル且つ最適化させ、DBサーバのCPU使用率を抑えた、効率的なSQLにチューニングをしていただく事を推奨する。尚、CASE-Xの命名の由来はCASE式の使用方法を拡張(eXtended)したこと、また、式の過程で真偽の評価文字に’X’を使用する事を特徴としているCASE構文であるため、CASE-Xと名づけている。(真及び偽はBoolean型を使用すべきであるが、PL/SQLを使用しない場合も考慮し、あえて'X' Char(1)を使用する。1 or 0はNumber型で数万回のNESTED LOOP時のメモリ効率を考慮すると使用すべきでは無い。)※注意SQLチューニングは最後の手段であり、本来、上流工程であるテーブル設計をER図を基にして高速化を計る事(再設計も辞さない)がリレーショナル理論の基本であり、RDBMSを使用する上ではDOAを最重要視するべきです。DOAとOOPを併用する事が最適であり、推奨いたします。このCASE-XはSQLチューニングの理論であり、casexや他のSQLでCASE文の使用方法とは似て異なるものなので混同しないでください。このCASE-Xの内容は同一作者により「ウィキペディア(Wikipedia)」に投稿済みです。(著作権の侵害を考慮しております。)
「CASE-X」の説明
[
関連ページ ]
[
ホットワード ]