교재 145p 윗부분의 예제가 잘 이해가 안갑니다.
-> 잘못된 내용을 기술했습니다. 인덱스에 사용된 필드는 where 조건에 모두 기술되는 것이 효율적이다 라는 개념을 먼저 이해하시구요.
SFLIGHT 테이블의 CARRID의 모든 값을 가져와서 RANGE 변수에 넣은후에 WHERE 조건에 기술하는것이 정확한 내용입니다.
즉, 아래와 같이 변경하면 되겠습니다.
6 인덱스에 사용된 필드 모두 기술
SQL문의 성능에 가장 큰 영향을 미치는 것은 인덱스이다. WHERE 조건과 테이블 JOIN 조건인 ON 구문에도 인덱스로 구성된 필드를 사용하는 것이 당연히 효율적이다. 인덱스에 사용된 모든 필드는 가급적 모두 기술하자. SFLIGHT 테이블에서 3개의 필드(CARRID, CONNID, FLDATE)로 구성된 인덱스 하나만 존재한다고 가정하자. 그리고 WHERE 조건에 사용될 CARRID 값을 모를 경우에는 RANGE 변수를 이용하여 해당 컬럼에 존재하는 모든 값을 INSERT 한 후에 SELECT 해야 적절하게 인덱스를 활용할 수 있다. 이때는 직접 하드코딩으로 기술하거나, 테이블에서 DISTINCT를 이용해 SELECT 할 수도 있다. 이것은 SELECT-OPTIONS이 WHERE조건에 사용될 때도 동일하다.
X |
O |
<BOX> SELECT * FROM sflight INTO TABLE itab WHERE connid = ‘0017’ AND fldate = ‘20140101’. </BOX> |
<BOX> RANGES : r_carrid FOR sflight-carrid. -- 이하 생략 -- SELECT * FROM sflight INTO TABLE itab WHERE carrid = r_carrid AND connid = ‘0017’ AND fldate = ‘20140101’. </BOX> |