마이바티스에서 #, $의 차이는 옵티마이저 동작의 여부이다.
select * from testTable where id = #{testId}
select * from testTable where id = ${testId}
$의 경우 #와는 달리 SQL 인젝션 공격에 취약한 단점이 있지만,
장점은 옵티마이져가 실행되기 때문에 적절한 플랜으로 쿼리가 돌아간다.
예를 들어,
EMPLOYEE 테이블에 POSITION 이라는 컬럼에
아래와 같은 데이터가 있다고 가정하자.
사원 900명
대리 500명
로얄패밀리 10명
경영진 2명
테이블에서 '사원'이나 '대리'를 자주 추출할 때에는 Full Scan이 유리하고
상대적으로 적은 '로얄패밀리'나 '경영진'을 추출할 때에는 Index 스캔이 유리하다.
이때 '$'를 사용하면 데이터의 양에 따라 Full scan 또는 Index scan 이 실행된다.
그러므로 상황에 맞게 # 또는 $을 적절히 사용하게 유리하다.
[ 인덱스에 관한 설명 ] - http://brownbears.tistory.com/57
[ 출처 ] - http://lng1982.tistory.com/246
'[개발] Programming > Database' 카테고리의 다른 글
오라클 ORA-01722: 수치가 부적합합니다. (0) | 2019.05.24 |
---|---|
오라클 SELECT 후 UPDATE 쿼리 (0) | 2019.04.09 |
오라클 SELECT 절에 문자 합치는 방법 (0) | 2019.02.21 |
iBATIS, CDATA를 적는 목적 (0) | 2018.11.07 |
iBatis 오라클 NUMBER 타입, java.math.BigDecimal cannot be cast to java.lang.String 에러 해결 방법 (0) | 2018.11.06 |
댓글