以下のように作成したテーブルに対して
・検索パターン1
・検索パターン2
のどちらのSELECT文を使用した方が効率的でしょうか?
どちらの実行計画も同じだったため、読みやすさから検索パターン1の方がいいと思っています。
検索パターン1はWHERE句で指定した条件をSELECT句に全く同じように記載しています。
検索パターン2はSELECT句で最低限の条件を記載しています。
-- テーブル作成 CREATE TABLE HOGE1 ( ID CHAR(1), NAME CHAR(10), FLG1 CHAR(1), FLG2 CHAR(1), FLG3 CHAR(1), YYMMDD CHAR(8) ); -- データ挿入 INSERT ALL INTO HOGE1 VALUES ('1', 'AAA', '1', '1', '1', '20180101') INTO HOGE1 VALUES ('2', 'BBB', '1', '0', '0', '20180202') INTO HOGE1 VALUES ('3', 'CCC', '1', '0', '1', '20180501') INTO HOGE1 VALUES ('4', 'DDD', '1', '1', '0', '20180101') INTO HOGE1 VALUES ('5', 'EEE', '0', '1', '1', '20180101') INTO HOGE1 VALUES ('6', 'FFF', '0', '1', '0', '20180101') INTO HOGE1 VALUES ('7', 'GGG', '0', '0', '1', '20180101') INTO HOGE1 VALUES ('8', 'HHH', '1', '1', '1', '20180101') SELECT * FROM DUAL; -- 検索パターン1 SELECT NAME, CASE WHEN (FLG1 = '1' AND (YYMMDD = '20180101' OR YYMMDD = '20180202')) THEN FLG1 WHEN (FLG1 = '0' AND (YYMMDD = '20180101' OR YYMMDD = '20180202')) THEN FLG2 ELSE FLG3 END AS RESULT1 FROM HOGE1 WHERE (FLG1 = '1' AND (YYMMDD = '20180101' OR YYMMDD = '20180202') OR (FLG1 = '0' AND (YYMMDD = '20180101' OR YYMMDD = '20180202'))); -- 検索パターン2 SELECT NAME, CASE WHEN FLG1 = '1' THEN FLG1 WHEN FLG1 = '0' THEN FLG2 ELSE FLG3 END AS RESULT1 FROM HOGE1 WHERE (FLG1 = '1' AND (YYMMDD = '20180101' OR YYMMDD = '20180202') OR (FLG1 = '0' AND (YYMMDD = '20180101' OR YYMMDD = '20180202')));
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/17 11:42
2018/05/17 11:47