소개
카카오에서 DBA로 경력을 시작해 밸런스히어로를 거쳐 현재는 당근마켓 DB팀에서 근무하고 있습니다.
데이터 모델링, 쿼리 튜닝, DB 서버 성능 최적화 등 DBMS 운영과 관련된 로우 레벨부터 하이 레벨까지의 모든 업무를 수행해왔습니다.
MySQL, MariaDB, MongoDB와 같은 다양한 DBMS를 전문적으로 운영해왔으며,
저서로는 ⟪Real MySQL 8.0 개정판⟫을 집필했습니다.
강의
전체 2로드맵
전체 1수강평
- Real MySQL 시즌 1 - Part 1
게시글
질문&답변
6강. Top N 데이터 조회와 관련해 질문있습니다.
안녕하세요. 답변이 좀 늦었습니다.질문주신 내용들에 대해 각각 답변을 드리면,Q1) 만약 categories 테이블에 id가 1,2,3인 데이터가 있다면, 3번의 서브쿼리가 실행되고 각 결과를 전부 Union해서 최종 결과를 반환하게 되는건가요?대략 말씀하신 형태로 동작한다고 보시면 되는데요, 독립적으로 실행되는 서브쿼리보다는 조인과 같은 형태로 처리된다고 생각해주시면 좋을 것 같습니다.Q2) LIMIT 3을 제거했을 때 내림차순 정렬이 안된 상태로 데이터가 반환되는데요. 그 이유가 뭔지 알 수 있을까요?이건 쿼리의 실행계획을 봐야하는데요. LIMIT 절이 있을 때는 (category_id, views)로 구성된 인덱스를 뒤에서부터 읽다보니(Backward index scan) 내림차순 정렬로 데이터가 반환됐지만 LIMIT 절이 없는 경우에는 해당 인덱스를 정순으로 스캔하면서 데이터를 읽어와서 오름차순 정렬인 것으로 예상됩니다.사실 이 부분은 현재 제일 바깥쪽 쿼리에 ORDER BY 절이 없기때문에, 쿼리 처리 방식에 따라 최종적인 결과 데이터의 정렬 순서가 예상한 것과는 다를 수 있습니다. 그래서 어떻게 처리되던지 항상 내림차순 정렬을 원하시면 제일 바깥쪽 쿼리에 ORDER BY 절을 명시해주시는 것이 좋습니다. 답변 읽어보시고 혹시 더 추가로 궁금한 부분 있으시면 말씀해주세요!감사합니다.
- 0
- 2
- 53
질문&답변
12강. LEFT JOIN 사용 방법 준수 5:42
안녕하세요.문의주셨던 부분 관련해서 제가 말씀드리고자 했던 요지는LEFT JOIN을 굳이 사용하지 않아도 되는 경우에는 JOIN을 제거본래 목적이 LEFT JOIN이 아닌 INNER JOIN이 맞다면, 명시적으로 INNER JOIN으로 변경입니다!혹시 추가로 궁금한 부분 등이 있으시면 편하게 말씀해주세요.감사합니다.
- 0
- 2
- 78
질문&답변
JPA 사용시 테이블수정에 궁금한점이있습니다
안녕하세요.사용하시는 컬럼에 저장될 수 있는 값의 최대 길이를 비교적 명확하게 파악하고 계신 상황이라면(혹은 파악하실 수 있는 상황이라면), 강의에서 설명드린 것과 같이 DB 서버 자원 사용 효율을 위해 모든 문자열 컬럼들을 VARCHAR(255)로 사용하시기 보다는 실제 사용되는 길이만큼만 지정해서 사용하시는 것을 권고드립니다.감사합니다.
- 0
- 1
- 95
질문&답변
복합인덱스 정렬
안녕하세요.테이블에 (finished_at, id)로 구성된 인덱스가 있다고 가정했을 때, 공유해주신 쿼리가 실행되면 인덱스 데이터에서 finished_at이 '시작날짜' 값 이상인 데이터들을 쭉 스캔하면서 id > 8인 데이터들을 확인하고 이렇게 확인된 데이터가 LIMIT 절에 주어진 30건을 만족하면 쿼리는 종료됩니다.LIMIT 절이 주어지지 않으면 말씀하신 것처럼 기본적으로 finished_at 컬럼에 주어진 조건 범위로 인덱스 데이터를 전부 스캔할 것으로 예상합니다. 쭉 스캔하면서 id 컬럼에 주어진 조건을 만족하는지 추가로 확인하게 됩니다.그리고 이러한 동작 방식은 id 컬럼에 대한 조건이 범위 조건이 아니고 동등조건이라 하더라도, 인덱스의 선두 컬럼인 finished_at 컬럼에 대해 범위 조건이 주어졌기 때문에 동일하게 동작합니다.그럼 추가로 궁금한 부분 있으시면 다시 말씀해주세요.감사합니다.
- 0
- 1
- 72
질문&답변
LATERAL 키워드는 mysql8 에서 잘 지원 되나요?
안녕하세요.MariaDB에서는 쿼리에서 LATERAL 키워드 사용이 불가하고, 내부적으로 Lateral Derived 최적화를 지원하는 것으로 보입니다.저희 강의 내용은 MySQL 8.0을 기반으로 하므로, 강의에서 소개된 기능 등을 테스트하실 때는 가능하시다면 MySQL 8.0 버전대를 설치해서 테스트해봐주시면 좋을 것 같습니다.추가로 궁금한 부분 있으시면 다시 말씀해주세요.감사합니다.
- 0
- 1
- 91