데이터 처리 도구 63

DAY 31 / [프로그래머스] SQL 연습문제 3개 풀기

1. 특정 형질을 가지는 대장균 찾기 (난이도 1) 2. 가장 큰 물고기 10마리 구하기 (난이도 1) 3. 한 해에 잡은 물고기 수 구하기 (난이도 1) 특정 형질을 가지는 대장균 찾기SELECT COUNT(DISTINCT ID) AS "COUNT"FROM ECOLI_DATAWHERE BIN(GENOTYPE) & 2 != 2 AND (BIN(GENOTYPE) & 1 = 1 OR BIN(GENOTYPE) & 4 = 4) 2진수를 10진수로 표현해보면 아래와 같다.-- 0001 -> 1-- 0010 -> 2-- 0011 -- 0100 -> 3 -- 0101 -- 0110 -- 0111 -- 1000 -> 4 -- 1001 -- 1010 -- 1100 -- 1101 -- 1011 -- 1110 -- ..

SQL 성능 향상을 위한 공부: 1-2) DBMS와 기억장치의 관계

DBMS는 데이터를 처리하는 소프트웨어다.=> 즉 데이터를 보관하고 있는 장소(?)인 기억장치(메모리, 디스크, 캐시 등 하드웨어 자원)와 DBMS가 어떻게 상호작용하느냐에 의해 실제 성능이 크게 좌우된다. 이후 공부하게 될 대부분의 성능 문제들이 결국 DBMS가 메모리나 디스크를 어떻게 사용하는지와 관련이 있기 때문에, ‘DBMS와 기억장치의 관계’를 먼저 이해하는 과정이 필요하다.예를 들어 쿼리가 느린 이유가 디스크를 너무 많이 읽어서인지, 메모리에 데이터가 없어서인지, 임시 파일을 만들어 정렬하고 있어서인지 등을 알려면 DBMS가 어떤 데이터를 메모리에 올리고, 언제 디스크를 사용하는지를 먼저 이해해야 제대로 판단할 수 있다. 그래서 지금은 1번을 공부하는 것이다. 1. DBMS는 데이터를 어디서 ..

SQL 성능 향상을 위한 공부: 1-1) DBMS 아키텍처 이해하기

무엇을 공부해야 할까?1. DBMS 내부 처리 과정을 이해해야 한다.SQL 성능을 높이기 위해서는 DBMS 내부 처리 과정을 이해해야 한다. → SQL은 선언적 언어이기 때문에 “어떻게 처리할지”가 아니라 “무엇을 원하는지”만을 기술함.→ 어떻게 실행할지는 사용자가 아닌 DBMS가 결정함. DBMS는 입력받은 SQL을 분석해 내부적으로 실행 계획을 세우고 수행함.→ 즉 내가 쓴 쿼리와 DBMS가 실제로 수행하는 작업 사이에는 차이가 있고, 내가 어떤 쿼리를 작성했을 때 DBMS가 실제로 어떤 식으로 작업하는지 이해해야 성능에 최적화된 쿼리를 작성할 수 있다.→ 따라서 단순히 쿼리 문법만 아는 것만으로는 성능을 고려한 쿼리를 작성할 수 없으며 성능 문제가 발생해도 원인을 정확히 파악할 수 없다. 2. D..

SQL 사용 시 성능도 고려해야 하는 이유

SQL을 사용할 때, 정확한 결과를 얻기만 하면 그걸로 끝인 줄 알았다. 어떤 쿼리는 길이가 길어져서 가독성이 좋지 않다고 느끼는 날도 있었고, 체감상 실행 속도가 느리다고 느꼈던 경우도 있었지만 원하는 결과를 추출하는 데 성공했다면 크게 신경쓰지 않고 넘어갔었던 것 같다. 물론 그냥 넘어가면서도 이렇게 해도 되는 건가? 라는 의문이 들면서 찝찝했었다. 그래서 일을 쉬고 있는 동안 성능 좋은 SQL 작성 방법에 대해 공부해보기로 했다. 1. 성능이 안좋은 SQL이 미치는 영향원하는 결과 추출이라는 목적만 달성하면 되는 것 아닌가? 굳이 성능까지 고려해가면서 쿼리를 작성해야 하나? 라는 질문을 먼저 해보면서 시작해보자. 같은 결과를 만들더라도 SQL을 어떻게 작성하느냐에 따라 성능이 크게 달라질 수 있다..

DAY 30 / [solvesql] 연습문제 3개 풀기

난이도풀기문제 이름난이도 32개- 미세먼지 수치의 계절간 차이- 친구 수 집계하기 난이도 51개- 세션 유지 시간을 10분으로 재정의하기 30일동안 solvesql에 있는 모든 연습문제를 다시 풀어보았다. 예전에 풀었던 문제지만 오랜만에 다시 마주하니 생각보다 어려웠던 것들도 있어서 공부가 많이 되었다. 복습을 잘하자. 화이팅

DAY 29 / [solvesql] 연습문제 3개 풀기

난이도풀기문제 이름난이도 31개- 전국 카페 주소 데이터 정제하기난이도 41개- 세 명이 서로 친구인 관계 찾기난이도 51개- 스테디셀러 작가 찾기 이전에 다 풀었던 문제들인데도 어려웠음. 조인을 많이 해야하는 경우나 연속인 데이터를 찾는 경우 어떤 순서대로 작성해야할지 미리 그려보면서 하기! [복습 노트]전국 카페 주소 데이터 정제하기https://limhm4907.tistory.com/259 DAY 9 / [solvesql] Advent of SQL 2024 2문제 (전국 카페 주소 데이터 정제하기, 미세먼지 수치의 계절간 차전국 카페 주소 데이터 정제하기SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(address, ' ', 2), ' ', 1) AS sido , SUBSTR..

DAY 28 / [solvesql] 연습문제 3개 풀기

난이도풀기문제 이름난이도 31개- 멀티 플랫폼 게임 찾기 난이도 41개- 유량(Flow)와 저량(Stock) 난이도 51개- 일일 주문량의 중앙값 찾기 일일 주문량의 중앙값 찾기-- 2019년 1월 한 달 동안 일일 주문량의 중앙값을 구하는 쿼리-- 단, ‘C’로 시작하는 환불 거래는 계산에서 제외WITH base AS ( SELECT order_date , COUNT(DISTINCT order_id) AS cnt_orders FROM orders WHERE order_date BETWEEN '2019-01-01' AND '2019-01-31' AND order_id NOT LIKE 'C%' GROUP BY order_date)SELECT AVG(cnt_orders) AS med..