최신글
-
[성능 개선] 데이터베이스 튜닝의 시작, 인덱스 활용하기
데이터베이스의 성능을 향상시키기 위한 자료구조인 인덱스는 테이블의 특정 컬럼으로 생성된다. 이 때 카디널리티와 선택률은 어떤 컬럼에 대해 인덱스를 작성할 것인지 기준이 되는 지표이다. 1) 카디널리티가 높을수록 카디널리티란 값의 균형을 나타내는 개념이다. 모든 레코드에 다른 값이 들어가 있는 유일 키 컬럼인 경우 카디널리티가 높아 인덱스로 생성하기 적절하다고 판단한다. 반대로 모든 레코드에 같은 값이 들어가 있다면 카디널리티가 낮은 컬럼이다. 가령 데이터 타입이 Boolean인 컬럼을 기준으로 인덱싱을 한다면 모든 값이 TRUE OR FALSE라 인덱싱의 효율이 떨어진다. 이름, 아이디, 주소같은 데이터가 높은 카디널리티를 갖는다. 2) 선택률이 낮을수록 선택률은 특정 컬럼 값을 지정했을 때 테이블 전체..
2023.05.24
-
[성능 개선] 결합을 지배하는 자가 성능을 지배한다
결합 알고리즘은 결합의 성능을 결정하고 SQL 전체의 성능을 좌우하는 요인으로, 옵티마이저가 어떤 알고리즘을 선택할지 여부는 데이터 크기 또는 결합 키의 분산이라는 요인에 의존한다. Nested Loop Nested Loop는 중첩 반복을 사용하는 알고리즘이다. 1) Nested Loop의 작동 ① outer loop: 결합 대상 테이블(구동 테이블)에서 레코드를 하나씩 반복해가며 스캔한다. ② inter loop: 구동 테이블의 레코드 마다 내부 테이블의 레코드를 하나씩 스캔해서 결합 조건에 맞으면 리턴한다. ③ 이러한 작동을 구동 테이블의 모든 레코드에 대해 반복한다. 2) Nested Loops의 특징 Nested Loops의 실행 시간은 레코드 수에 비례한다. (접근 대상 레코드 수 = R(A) ..
2023.05.21
-
[성능 개선] 데이터베이스의 성능을 좌우하는 쿼리 평가 엔진과 버퍼 매니저
DBMS 아키텍쳐 개요 쿼리 평가 엔진 쿼리 평가 엔진은 사용자로부터 입력받은 SQL 구문을 분석하고, 어떤 순서로 기억장치의 데이터에 접근할지를 결정하는데 이 때 결정되는 계획을 '실행 계획'이라고 한다. 이러한 실행 계획에 기반을 둬서 데이터에 접근하는 방법이 '접근 메서드'이다. 한마디로 쿼리 평가 엔진은 계획을 세우고 실행하는 DBMS의 핵심 기능을 담당하는 모듈이다. 실행 계획 실행 계획이 만들어지면 DBMS는 그것을 바탕으로 데이터 접근을 수행한다. 하지만 데이터양이 많은 테이블에 접근하거나 복잡한 SQL 구문을 실행할 경우 옵티마이저가 최적의 실행 계획을 선택하지 못할 수 있다. 이처럼 SQL 구문의 지연이 발생했을 때는 다음 명령어를 통해 실행 계획을 확인한다. DBMS 명령어 Oracle..
2023.05.18
-
[SQL] CTE, 뷰 그리고 임시 테이블
대용량 데이터를 다룬 이후로 성능에 대한 관심이 커졌다. 특히 자주 사용하는 컬럼들에 대해 임시 테이블을 생성했던 것이 다른 테이블들과 조인 시 확실히 효율적이고 체감 성능도 개선되었던 좋은 경험이었다. 그래서 CTE와 뷰, 임시 테이블을 사용할 때 실제로 성능 차이가 있는지, 그리고 임시 테이블을 생성하기까지 몇 차례의 시행착오가 있었기 때문에 CTE와 임시 테이블을 언제, 어떻게 사용해야 할지 알아보았다. CTE와 뷰의 차이 우선 CTE와 뷰에 대해서는 이전에 메모해둔 내용이 있어서 다시 찾아보았다. 오늘 강의에서는 뷰에 대한 내용이 있었는데 뷰의 쓰임 중 하나가 복잡한 연산을 용이하게 하는 것이어서 with절과의 차이가 무엇인지 궁금해서 추가로 찾아보았다. 임시테이블이라는 관점에서는 유사하지만 ..
2023.05.17
-
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 12주차 학습 일지
2022.04.24 ~ 2022.04.28 12주차에는 드디어 마지막 해커톤 프로젝트와 발표가 있었다. 교육 과정이 끝나자마자 끔찍한 감기 몸살을 겪어 12주차 학습 일지는 제출하지 못했지만 해커톤 대시보드 cheat sheet와 회고로 늦은 마무리를 해보려 한다. (분명 11주차 학습 일지에서 '좋은 컨디션으로 마무리할 수 있었으면 좋겠다'라고 썼었는데..😢) 목차 프로젝트: 어린이 독서 습관에 따른 웅진북클럽 콘텐츠 운영 전략 유데미 스타터스 취업 부트캠프 4기 데이터분석/시각화 과정 이수 후기 프로젝트: 어린이 독서 습관에 따른 웅진북클럽 콘텐츠 운영 전략 사용 데이터 이용자 정보 TBL 회원 정보 TBL 상품 구매 이력 TBL 온라인 콘텐츠 열람 로그 TBL 콘텐츠 정보 TBL 전시 정보 TBL ..
2023.05.09
-
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 11주차 학습 일지
2022.04.17 ~ 2022.04.21 11주차는 고객 분석을 중심으로 SQL 실습과 마지막 프로젝트를 대비한 미니 프로젝트를 진행했다. 배운 내용을 복습하는 것은 이번 학습일지가 마지막이 될 듯해서 어떤 내용으로 마무리를 하면 좋을지 고민하다가 이번 주 학습일지에서는 유데미 스타터스 학습일지 포스팅을 통해서 블로그 유입이 얼마나 발생했을지 데이터로 확인해보기로 했다. 특히 재구매율 지표를 응용하여 블로그 재방문율을 구해보았다. 목차 월별 재구매율(복습) 일별 블로그 재방문율(응용) 월별 재구매율 step 1. 고객 구매 월 중복없이 구하기(date_trunc) -- 월별 재구매율 step 1. 고객 구매 월 중복없이(date_trunc) ), cte_month_customer as ( select ..
2023.04.23
-
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 10주차 학습 일지
2022.04.10 ~ 2022.04.14 10주차부터는 SQL 실습이 시작되었다. 이제 정말 스타터스 교육 과정의 막바지여서 기대반 걱정반으로 마지막 프로젝트를 기다리며 하루하루를 보내고 있는데 와중에 SQL 실습도 그리 녹록치는 않았다. 개인 과제와 팀 프로젝트, 극악의 밸런스 게임이었다.. 그리고 마지막 프로젝트에서 태블로와 SQL을 동시에 활용해야 하는 부분에 대해서 슬슬 걱정이 되기 시작했다. 무엇을 태블로로 작업하고 무엇을 SQL로 접근해야 하는지? 그래서 이번 주 학습일지에서는 지표 추출 쿼리들을 복습하고 시각화까지 연습하려 한다. 목차 매출지표 일반 매출액, 구매자수, 주문건수 ARPPU, AOV 매출지표 고급 매출증감 매출누계 이동평균 ABC 분석 Z차트 매출지표 일반 1. 매출액, 구매..
2023.04.16
-
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 9주차 학습 일지
2022.04.03 ~ 2022.04.07 9주차는 지난 주에 이어서 진행하던 프로젝트를 마무리하고 곧바로 태블로 스페셜리스트 자격증을 준비했다. 아무래도 최종 프로젝트 전 마지막 프로젝트이다보니 긴장도 되고 어느 때보다도 피드백에 집중하게 되었다. 특히 다른 조들의 발표에서 주제를 전개하는 방식이나 LOD, 날짜 수식을 기재하는 방식들을 참고할 수 있었다. 직,간접적으로 영향을 받게 될까봐 다른 사람의 작업물을 보는 것을 기피하는 편인데 그래도 '하나만 얻어가자'라는 평소 가치관으로 마음을 다잡았다. 그리고 대망의 자격증.. 최대한 일과 시간에 졸지 않고 집중해서 공부했고 결과는 다행히 합격이었다. 오랜만에 한시름 놓은 기분이다. 이번 주 학습일지에서는 대시보드 Cheat Sheet로 마지막 프로젝트를..
2023.04.09
-
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 8주차 학습 일지
2022.03.27 ~ 2022.03.31 8주차는 태블로 고급 그래프 시각화를 배우면서 새로운 프로젝트를 진행했고 태블로 스페셜리스트 자격증 준비를 병행했다. 개인적으로는 틈틈이 SQL 해커랭크, 리트코드 연습문제를 풀었는데 이틀 밖에 하지 못했다. 아침 시간을 활용하려 하는데 프로젝트가 시작되면 아무래도 다른 것을 병행하기는 어려웠다. 이번 주 학습일지에서는 진행 중인 프로젝트를 복기하면서 프로젝트에서 사용했던 고급 그래프들을 복습하려 한다. 목차 태블로 고급 그래프(게이지 차트, 막대 게이지 차트, 불릿 차트, 폭포 차트) 프로젝트: Google Playstore Free to Paid App Conversion Dashboard 태블로 고급 그래프 게이지 차트 계산된 필드 생성 (sales(%))..
2023.04.02
-
Placements (HackerRank)
Placements | HackerRank Write a query to output the names of those students whose best friends got offered a higher salary than them. www.hackerrank.com Write a query to output the names of those students whose best friends got offered a higher salary than them. Names must be ordered by the salary amount offered to the best friends. It is guaranteed that no two students got same salary offer. 풀이..
2023.03.28
-
262. Trips and Users (LeetCode)
Trips and Users - LeetCode Can you solve this real interview question? Trips and Users - Table: Trips +-------------+----------+ | Column Name | Type | +-------------+----------+ | id | int | | client_id | int | | driver_id | int | | city_id | int | | status | enum | | request_at | leetcode.com Write a SQL query to find the cancellation rate of requests with unbanned users (both client and drive..
2023.03.27
-
유데미 스타터스 취업 부트캠프 4기 - 데이터분석/시각화(태블로) 7주차 학습 일지
2022.03.20 ~ 2022.03.24 7주차는 다양한 집계를 할 수 있는 Primary 함수와 LOD를 중심으로 태블로 프로젝트를 진행했다. 매개변수를 설정하는 것은 조금 익숙해졌지만 datediff와 대상날짜, 날짜 매개변수를 함께 사용하여 조건을 부여하는 것, 시작일과 종료일을 각각 조정하여 조회기간을 설정할 수 있도록 매개변수를 설정하는 것은 어려웠던 부분이었다. 그리고 역시 메인은 LOD로, 개념을 이해하기 위해서 백단에서 어떤 연산이 이루어지는지 순차적으로 접근해야 했고 그나마 쉽다고 여겼던 LOD fixed 연산도 실제 사용 시에는 헷갈리는 부분이 있었다.(가령 VLOD에 존재하는 차원도 fixed 해야 하는지? 결론은 안전하게 접근한다면 이미 존재하는 차원도 fixed 할 수 있다!) ..
2023.03.26