본문 바로가기
[개발] Programming/Database

MyBatis, 쿼리 파라미터 # 와 $ 의 차이점

by eatyourKimchi 2018. 11. 5.

마이바티스에서 #, $의 차이는 옵티마이저 동작의 여부이다.


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

댓글