티스토리 뷰

DevOps/DB

스칼라쿼리 원리

brad.min 2021. 2. 6. 23:51
반응형

스칼라 쿼리는 한번에 1행씩 반환. 값이 없을 때는 Null을 반환한다.

 

동작 원리

1. 메인쿼리 수행 후 반환된 한줄의 값을 출력값으로 메모리에 적재한다.

2. 출력값을 스칼라쿼리에 입력하여 나온 결과를 매모리 내의 query execution cache에 해시화하여 저장한다.

3. 메인쿼리에 반환된 다음줄의 출력값이 서브쿼리로 들어오면 해시한수를 이용해 캐시에서 찾아 출력한다.

4. 캐시에 없으면 다시 서브쿼리의 테이블로 가서 데이터를 찾아  query execution cache에 저장한다.

5. 메인 쿼리가 끝날때 까지 반복한다.

 

스칼라쿼리 

1. 스칼라쿼리는 조인되는 컬럼이 유니크할때만 가능하다. 

 

Select emp.uid, emp.uname, (select dname from dept where dept.deptno = emp.deptno) from emp

Deptno가 유니크하지 않으면 메인쿼리에서 uid deptno 2001이 반환되었을 때 dept.deptno 의 두가지 중 어떤 것을 선택해야할지 몰라 에러가 난다. 따라서 where로 연결되는 컬럼은 반드시 유니크값이여야한다.

 

2. 스칼라 쿼리는 두개 이상의 컬럼을 사용할 수 없다.

 

3. 서브쿼리 테이블의 데이터가 많은 경우 Join보다 성능이 안좋을 수 있다.
메인쿼리 결과가 10,000라고 가정하고 서브쿼리 테이블의 데이터도 10,000개라고 가정하자.
이런 경우 메인쿼리에서 deptno를 출력하여 서브쿼리에 입력하면 캐시에 없기 때문에 dept 테이블에 접근을 하게되고
테이블 전체를 스캐닝해야한다. 말그대로 캐시가 무의미해진다. 따라서 서브쿼리 테이블의 유니크한 값이 적을 수록 성능은 좋아진다.

반응형

'DevOps > DB' 카테고리의 다른 글

[Redis] Docker-compose로 redis를 설치하기  (0) 2024.05.03
벡터 DB 비교  (0) 2024.02.21
[mongoDB] 중복된 document 제거  (0) 2023.02.23
[MySQL] show index from 테이블 해석  (0) 2021.01.22
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함