목록mysql (9)
개발자는 기록이 답이다
2024.04.05 - [SQL/쿼리 최적화] - Index를 활용한 10만건의 레코드 Join쿼리를 최적화하자 Index를 활용한 10만건의 레코드 Join쿼리를 최적화하자 마이페이지에서 유저가 발급받은 쿠폰 이력을 조회하는 기능을 구현해야 했습니다 해당 기능 구현 시 쿼리 최적화를 고려했던 과정을 포스팅 해보고자 합니다. 📌 무조건 쿼리 속도가 빠르면 strong-park.tistory.com 지난번에는 간단한 쿼리를 이용해서 인덱스를 통해 성능을 개선한 내용을 포스팅했습니다. 쿼리 수행 시간이 약 19ms정도 개선되었는데, 이 정도의 차이는 상당히 적은 차이입니다. 왜냐하면 네트워크 IO작업 한번만 해도 10ms가 넘는 경우가 있기 때문입니다. 그래서 좀 더 복잡한 쿼리를 만들기 위해서는 (진행중인..
1. 쿼리파서 사용자 요청으로 들오온 쿼리 문장을 토큰(MySQL이 인식할 수 있는 최소 단위의 어휘나 기호)으로 분리해 트리 형태의 구조로 만들어내는 작업. 쿼리 문장의 기본 문법 오류는 이 과정에서 발견되고 사용자에게 오류 메세지를 전달한다. 2. 전처리기 파서과정에서 만들어진 파서 트리를 기반으로 쿼리 문장에서 구조적인 문제점이 있는지 확인한다. 각 토큰을 테이블 이름이나 칼럼 이름, 또는 내장 함수와 같은 개체를 매핑해 해당 객체의 존재 여부와 객체의 접근권한 등을 확인하는 작업을 수행한다 실제 존재하지 않거나 권한 상 사용할 수 없는 개체의 토큰은 이 단계에서 걸러진다. 3. 옵티마이저 사용자의 요청으로 드러온 쿼리 문장을 저렴한 비용으로 가장 빠르게 처리할지 결정하는 역할 DBMS의 두뇌에 해..
2024.02.29 - [Spring/트러블 슈팅] - 쿠폰 발급에 대한 동시성 처리 (1) - synchronized, pessimisti Lock, optimistic Lock 쿠폰 발급에 대한 동시성 처리 (1) - synchronized, pessimisti Lock, optimistic Lock1. 데이터 모델링 쿠폰 발행 기능을 구현하기 위해 Coupon 테이블에 지금까지 발행된 쿠폰 개수(issued_quantity)를 반정규화하는 방식을 사용했습니다. CREATE TABLE coupon ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARYstrong-park.tistory.com 지난 시간에 이어서 동시성 제어하는 방법에 대한 다른 방법들을 알아보겠습니다. 레코드 ..
프로젝트를 하면서 맨 처음에는 시간 데이터로 DATETIME을 사용했습니다. MySQL기준으로 시간을 나타내는 대표적인 타입으로 DATETIME과 TIMESTAMP 2종류가 존재합니다. 어떻게 더 나을지 테스트한 결과를 포스팅해보려고 합니다. 1. MySQL에서의 시간 데이터 MySQL공식문서에 따르면 시간 데이터는 총 3가지가 존재합니다. 간단하게 특징별로만 소개하자면 아래와 같습니다. DATE 시간부분 없이 날짜로만 'YYYY-MM-DD' 형식으로 사용된다. 지원되는 범위 '1000-01-01'에서 '9999-12-31'까지 가능하다. 저장용량은 3byte이다. 그렇다면 시간까지 포함하는 DATETIME과 TIMESTAMP의 차이는 무엇일까요? DATETIME 날짜 및 시간 부분 모두 포함해서 'YY..