SELECT * FROM DB2.SLJFIDD WHERE 폐기년월일 > :WK-M-BASE-YMD AND 거래가능구분 NOT IN ('0','9') AND (지점코드 BETWEEN :WK-BRNCD-FR AND :WK-BRNCD-TO OR 1=0)
예전에 어떤 개발자분께서 만드신 쿼리입니다. 이 쿼리에서 'OR 1=0' 은 어떤 기능을 하는지.. 도져히 모르겠습니다. ㅜㅜ 아시는분.. 답변 부탁드릴께요..
아무 기능도 없는것 같음. OR 1=0 은 없어도됩니다.
제생각에는 AND (지점코드 BETWEEN :WK-BRNCD-FR AND :WK-BRNCD-TO 의 조건 무시할때는 'OR 1=1'로 하고 조건 적용할때는 'OR 1=0'로 하도록 한게 아닌가합니다. 지우고 다시 입력하기 귀차나서 ??? -.-
제 생각에는... 성능에 관련된 사항 같은데요..
지점코드가 인덱스되어있다면, 'or 1=0' 은 인덱스 적용을 못하게 만들어 늦은 응답속도의 원인이 될꺼라 생각됩니다.
도대체... 이 쿼리를 만드신 개발자분께서는 왜 'or 1=0' 를 사용했을까요?
DB2 옵티마이져와 관련 있는게 아닐까, 생각도 해봅니다.
알았습니다!! 어떤 특정 테이블의 인덱스가 1번 (A,B,C), 2번 (A,B) 이 있는 경우, 쿼리 조건으로 A, B, C 항목 모두 사용한다면, 쿼리실행시, 1번 인덱스를 타게 됩니다. 여기서, 어떤 사정의 의해, 조건은 변함없고 인덱스만 2번으로 태우고자 한다면, AND (C='XXX' OR 1=0) 으로 해서, 2번 인덱스를 태울 수 있습니다.