1. join vs exists
다른 테이블의 데이터도 같이 가져올때는 join을 사용해야 효율적이지만, 다른 테이블에 데이터가 있는지 검사할 경우에는 exists가 더 좋다.
2. in vs or
or절인 경우 여러 컬럼이 올 수 있지만 in 같은 경우는 무조건 단일 컬럼으로 비교를 한다.
or절인 경우 여러개의 서브 쿼리의 집합이지만, in절인 경우 내부적으로 or절과 다른 로직이 들어가면서 최적화를 한다.
(mysql인 경우 in절에 이진 트리 검색을 한다고 한다. )
쿼리의 확장에도 in절이 or절보다 유연한 확장이 가능하다.
2-2 switch vs if else
분기 구문 ( case, else if )가 적을 경우에는 성능 차이가 의미 없을 수 있다. 하지만, 구문이 길어질 경우 switch구문을 사용하는게 더 효율적이다.
자바는 c언어 기반이다. c언어에는 jump table이라는 것이 존재한다. table switch, lookup switch 두가지로 나뉘는데, 메모리 상에 스위치 테이블을 만들고, 구문에 진입 시 해당 case문으로 바로 mapping 시켜줘서 if/else 구문보다 효율적이다.
BigO표기법으로 나타내면 switch / O(1)이고 if/else / O(n)일 수 있다.
하지만 복잡한 비교구문은 if구문만 가능하므로 경우에 switch문을 사용할 수 있을 경우에는 switch문을 사용하는 것이 더 좋다
https://blog.naver.com/nawoo/220179415518