엄범

 

 

서브 쿼리는 일반적으로 지양하는 편이 좋다

  • 스칼라 서브쿼리는 리턴되는 건수마다 결과를 수행하기 때문에 대량의 결과가 리턴되는 쿼리에서는 성능이 몹시 떨어진다.
    • 스칼라 서브쿼리란? subquery 위치에 따라서 다음과 같이 부른다.
      • SELECT 절에 있는 서브쿼리 : 스칼라 서브쿼리
      • FROM 절에 있는 서브쿼리 : 인라인 뷰
      • WHERE 절에 있는 서브쿼리 : 서브쿼리
    • 상황에 따라 이를 OUTER JOIN 등으로 변경할 수 있다.

 

 

실행 계획 (PLAN) 보기

Query는 비절차형 언어이기 때문에, 원하는 결과를 얻기 위한 시스템의 동작을 개발자가 하나하나 지정하는게 아니라

DBMS에게 Query를 주면 알아서 실행하고 결과를 돌려준다.

 

내가 넘긴 Query를 DBMS가 어떤 식으로 해석하고 실행할 것인가?를 의미하는 것이 "실행 계획" 이다.

 

Query 최적화 할 때 주로 확인한다. 어... 이거 좀 느릴 것 같은데? 생각 들면 플랜을 한 번 보는게 좋다.

 

오라클의 경우 예상 실행 계획을 확인하는 구문은 다음과 같다.

예상 실행 계획이므로 Bytes, Cost가 더 낮다고 해서 무조건 더 좋은 쿼리라고 할 수는 없다.
실제 수행 결과에 대한 비용은 다를 수 있음. 단건 조회냐, 대량 조회냐에 따라서도 결과가 다를 수 있고.

```sql

EXPLAIN PLAN FOR
SELECT * FROM SMPL_CARD;

 

SELECT * FROM TABLE(dbms_xplan.display);

```

결과에 출력되는 Plan hash value가 같으면, 두 쿼리의 플랜이 동일하다는 의미다.