| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- mysql
- MVMM
- 유데미코리아
- GoogleCloudConsole
- INSERT SELECT
- sql
- 백준
- Java
- 자바의 정석
- 스터디윗미
- Google Cloud Skills Boost
- Gemini
- react
- join
- 조건문
- 유데미
- javascript
- AI
- til
- 파이썬
- 개념
- 회고
- 자바
- databse
- 알고리즘
- 스레드
- dangerouslySetInnerHTML
- RESIGNAL
- Error Handling
- 프로그래머스
- Today
- Total
휘적이는 기록공간
[MySql] Scalar subquery vs Left Join (+Inline view) 본문
[MySql] Scalar subquery vs Left Join (+Inline view)
휘희 2023. 4. 25. 23:29
쿼리 리뷰를 받던 중
한 프로시저에서는 LEFT JOIN으로 가져오고
다른 프로시저에서는 스칼라 서브쿼리를 사용해서 정보를 가져오고 있었다.
왜 이렇게 작성했는 지?에 대한 물음에 쉽게 답을 못했다.
사유:
스칼라 서브쿼리에 대해 답을 못함
문제가 되던 프로시저에 그냥 LEFT JOIN이 아닌 인라인뷰 LEFT JOIN을 해놓고 왜 그렇게 했는지 답을 못함.
스칼라 서브쿼리, 인라인뷰 개념
1. Scalar subquery
A scalar subquery is a subquery that returns a single value. This is the simplest form of a subquery, and can be used in most places a literal or single column value is valid.
Subqueries
mariadb.com
간단하게 정리하면 단일 값을 반환하는 쿼리인 것이다.
2. Inline view
우선 view
뷰(view)는 관계 데이터베이스의 데이터베이스 언어 SQL에서 하나 이상의 테이블 (또는 다른 뷰)에서 원하는 모든 데이터를 선택하여, 그들을 사용자 정의하여 나타낸 것이다.
뷰는 기본 테이블(table)과 같이 행(column)과 열(row)로 구성되지만, 다른 테이블에 있는 데이터를 보여줄 뿐이며, 실제 테이블과 달리 데이터 자체를 포함하고 있는 것은 아니다. 뷰를 사용하면 여러 테이블이나 뷰를 하나의 테이블인 것처럼 볼 수 있다.
SQL - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 이 도표는 단문을 구성하는 SQL 언어 요소 몇 가지를 보여준다. SQL(,[1] 또는 , Structured Query Language[2][3][4][5], 구조화 질의어, S-Q-L[6])은 관계형 데이터베이스 관리
ko.wikipedia.org
뷰는 실제 테이블이 아니고 원하는 데이터들을 조합해서 볼 수 있는 가상 테이블이다.
인라인 뷰는 이런 뷰의 개념을 가져가서 생각하면 된다.
문제는 이 둘을 왜? 언제? 사용하지?
라는 걸 고려안하고 작성했다는 것.
스칼라 서브쿼리, 인라인뷰. 언제, 어떻게 사용하는 가
스칼라 서브쿼리
스칼라 서브쿼리는 내가 가져올 데이터가 단일 값일 경우 사용하면 된다.
드리븐 테이블에서 가져올 정보가 단일 값이라면
join이 아닌 스칼라 서브쿼리를 써서 가져오면 된다.
인라인뷰
가져와야할 정보를 가공해서 보여줘야할 경우 사용하면 된다.
Scalar subquery vs Left Join
그래서 둘 중 누가 더 좋은 것인가.
결론부터 말하면 JOIN을 사용해야한다.
실제로 자료를 찾아보면 subquery가 아닌 join을 사용하라고 하는데
그 이뉴는 JOIN이 subquery보다 성능이 좋기 때문이다.
다만 가져오는 테이블의 인덱스 값이나 여러 환경을 고려했을 때
Scalar subquery가 Left Join보다 성능이 더 좋을 경우도 있다.
그리고 Scalar subquery는 드라이븐 테이블에서 단일 값만 가져온다는 것을 명시해주기 때문에
간단하게 사용할 수 있다는 장점이 있다.
이 외에도 캐시를 저장을 한다는 특징이 있다.
좋은 예시로는 회사에서의 공통코드를 사용할 때는 대부분 스칼라서브쿼리를 사용해서 가져온다는 것이다.
결론
쿼리에 따라서 적절하게 잘 작성하자.
판단은 본인이
모르겠으면 대충하고 넘어가지 말고 물어볼 것.
참고
http://www.gurubee.net/article/68315
https://soobindeveloper8.tistory.com/761
https://mariadb.com/kb/en/subqueries-scalar-subqueries/
https://ko.wikipedia.org/wiki/VIEW_(SQL)
'Backend > Database & Persistence' 카테고리의 다른 글
| SQL Error Handling in MSSQL ( Try catch & RAISERROR() ) (0) | 2022.05.16 |
|---|---|
| (TIL) My Sql Error Handler, SIGNAL, RESIGNAL / 수정 (0) | 2022.05.09 |
| (TIL) MySQL 고급 문법 정리: INSERT SELECT부터 트랜잭션, 에러 핸들러까지 (0) | 2022.05.04 |
| (TIL) Data Warehouse, TPS (0) | 2022.04.22 |