분류 전체보기 240

DB 용어 정리

1. 샤딩(Sharding) 예시를 보면 year로 partitioning을 한다는 뜻으로 생각된다. 샤딩을 하는 구체적인 방법이 partition by를 사용하는 것 만을 의미하는 건지 물리적인 저장 공간을 나누는 것도 포함하는지 알아봐야 한다. 2. replication, Difference between Mirroring and Replication + Data Replication in DBMS 3. 데이터 마이그레이션 마이그레이션: 한 운영환경으로부터 다른 운영환경으로 옮기는 작업 데이터 마이그레이션: 개발 시스템에서는 데이터베이스 스키마가 변경되었지만, 운영 시스템의 데이터베이스 스키마가 변경되지 않았을 경우 마이그레이션을 수행한다. 차세대사업, 기업 합병 등 시스템의 변경에 의해 데이터를 새..

빈도로 최대/최소를 가져올 때는 LIMIT 1

일반적인 경우를 고려하고 코드를 작성하니 nested를 몇 번을 사용하는지 모른다. 최대/최소를 가져올 때는 정렬한 후 LIMIT 1을 가져오는 방법을 상기시켜야 한다. Customer Placing the Largest Number of Orders를 보면 가장 많이 주문한 값을 가져오라는 것을 알 수 있다. 이때 가장 간단한 방법은 정렬 후 LIMIT 1을 사용하는 것이다. order by count(*) 이런게 잘 나오도록 유도해야겠다. select customer_number from orders group by customer_number order by count(*) DESC LIMIT 1 ;

leetcode 문제에서 rank 함수 사용하기

Project Employees 3 문제를 풀며 group by로 묶어서 Limit를 걸기가 애매한 경우가 발생했다. 이때 사용하는 함수가 rank 함수다. # Write your MySQL query statement below select a.project_id, a.employee_id from (select p.project_id, e.employee_id, rank() over(partition by p.project_id order by e.experience_years desc) rankk from Project p inner join Employee e on p.employee_id = e.employee_id ) a where a.rankk = 1 ; rank() over 안에서 파티션을..

중간 정리

'이것이 MySQL이다'를 1독 했다. 트리거, 동적 SQL, 커서, index, stored procedure 등의 개념들을 이해할 수 있었고 7월에 들어가기 전 간략히 복습할 생각이다. 필요할 시 참고해서 사용하리라 기대된다. 모니터링은 MySQL Enterprise Backup 툴을 사용해볼 수 없기에(아마도 상용 제품이라?) 사용하리라 예상되며, 머릿속으로 시각화만 해둔다. 응용 프로그램 쪽은 이미 해봤었기에 안봤다. 다만, 파이썬과 db 연동하는 부분은 빠르게 사용할 수 있도록 준비해야겠다. SQL 쪽은 기본적인 것들만 아는 상태라 들어가기 전에 leetcode에서 50문제 정도를 목표로 잡고 풀 생각이다. 목적은 SQL에 익숙해지는 것이다.(nested query, join 등) 샤딩 정도를 ..

스토어드 프로시저?

MySQL의 스토어드 프로시저를 보면 프로그래밍 언어 수업 때 봤던 코볼(?) 언어가 생각난다. 정확하게 코볼인지는 모르겠는데 procedure와 function이 공존하며, begin, end 같은 키워드가 있는 언어가 그것이다. MySQL의 메모리에 코드가 올라가 있고 테이블 마다 형성하는 것으로 보인다. 파이썬으로 MySQL과 연결하여 쿼리를 던지면 보통(=나는) 완전한 쿼리문을 작성하여 던진다. 이 과정이 방대하면 부하가 걸리니 스토어드 프로시저로 특정 동작의 모듈을 구현해놓으면 클라이언트는 해당 함수 호출만 하면 되니 간편하다. 또한, 다른 DBMS는 스토어드 프로시저가 한 번 컴파일 되어 메모리에 상주하지만 MySQL은 호출할 때마다 컴파일이 된다고 한다. 스토어드 함수는 리턴값이 있고, IN..

SQL 연속적인 데이터 다루기

연속적인 데이터를 탐색할 때 기존에 가지고 있던 도구(ex: select, join)들로는 해결이 안되었다. id를 순차적으로 검색하려면 SQL의 반복문 문법을 가져다 써야하나 생각했는데 해답을 보니 굉장히 띵한 방법이 있다. 문제: Rising Temperature # Write your MySQL query statement below SELECT Weather.Id Id FROM Weather JOIN Weather w ON DATEDIFF(weather.RecordDate, w.RecordDate) = 1 AND weather.Temperature > w.Temperature ; 요구사항은 날짜가 연속된 데이터 중 전날에 비해 온도가 높아진 날의 Id를 출력한다. cartesian product를..