본문 바로가기
728x90

MySQL7

고객 검색 최적화 트러블 슈팅 고객 검색 최적화 트러블 슈팅 경험많은 부분이 부족할 수 있고, 제 경험을 적는 글이니 양해 부탁한다. 이번 글에서는 고객 검색 최적화 작업을 통해 경험했던 트러블 슈팅 사례를 공유하고자 한다.배경기존의 고객 검색은 ORM을 통해 이루어졌으며, 인덱스를 제외한 최적화가 이루어지지 않았다.(2~6초 이상)더 세부적인 검색 요구 사항이 발생함에 따라, ORM을 쿼리문으로 변경하고 최적화에 초점을 맞추고자 했다.전제 조건고객 테이블:고객 테이블의 휴대폰 번호는 하이픈이 포함된 상태로 저장됩니다.고객 등록 시 하이픈 제거된 번호와 하이픈 제거된 번호가 역순으로 저장된 컬럼이 존재합니다.모든 쿼리는 딕셔너리 형태로 저장됩니다.하이픈 제거된 번호와 역순 번호는 STORED 가상 열로 저장됩니다. (STORED, V.. 2024. 6. 2.
STORED 컬럼을 이용한 쿼리 최적화 해당 글은 회사 업무 중 스케줄 데이터(약 150만개) 들중 다양한 스케줄 제목(스튜디오 특성 상 사용자가 입력 하기 나름)을 가진 데이터 자체를 최적화 했던 방식을 정리 하는 글이다. 1. 데이터 예시 위의 사진과 같이 다양한 종류가 존재한다. 2. 최적화 전 1. 촬영 스케줄 이름이 돌 과 같은 데이터를 뽑아 내고자 했을때 쿼리문 schedule_title에 인덱싱이 적용 될수도 없는 LIKE문으로 데이터를 뽑아내야 한다. 이는 돌 데이터만 이렇게 뽑아 낸것이고, 만약 돌, 200일, 100일 등등 여러가지 조건들이 한꺼번에 들어가서 쿼리를 작성해야한다면, 상당한 비용이 발생 될것이다. 다른 방안을 찾아야한다!!! 3. 해결 방안 1. 인덱싱 활용 2. 가상 STORED 컬럼 활용 해결 방안으로는 첫.. 2024. 3. 9.
[MySQL] Pagination 방법론 업무 중 수 많은 데이터들을 쉽게 보기 위해서 페이지 네이션을 진행 했어야 했다. 페이지 네이션을 위해서 Limit, Offset를 찾아 본 결과, 성능적으로 문제가 많이 있다는 걸 검색을 통해서 알 수 있었다. 조사한 결과를 글로 적어 보고자 한다. 1. 성능 문제 OFFSET을 사용하면 데이터베이스는 지정된 숫자만큼의 레코드를 건너뛴 후 결과를 반환한다. 이는 데이터베이스가 모든 레코드를 실제로 읽은 후에 원하는 오프셋까지 건너뛰는 것을 의미한다. 이는 큰 데이터셋에서는 매우 비효율적일 수 있다. 특히 오프셋이 매우 크거나 데이터셋이 커지면 성능 문제가 발생할 수 있다. 아래의 이미지를 보게 되면 단번에 알 수 있다. 2. 일관성 문제 데이터베이스에서 OFFSET을 사용하여 페이징을 할 때, 새로운 .. 2024. 3. 3.
파이썬으로 다루는 MySQL pymysql 설치 pymysql은 Python에서 mysql을 사용할 수 있는 가장 쉬운 라이브러리이다. pymysql 라이브리러 이외에도 MySQLdb, MySQL connector 등의 다양한 라이브러리가 존재한다. 설치 pip install pymysql (터미널 창) mysql 핸들링 코드 작성 순서 1. pymysql 모듈 import 2. pymysql.connect() 함수를 사용하여 MySQL에 연결(호스트명, 포트, 로그인, 암호, 접속할 DB 등을 인자로 지정) 3. MySQL에 접속을 성공하면, Connection 객체로부터 cursor() 함수를 호출하여 Cursor 객체를 호출 4. Cursor 객체의 execute() 함수를 사용하여 SQL 문장을 DB 서버에 전송 5. SQL.. 2023. 4. 10.
프로그래머스 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 문제 설명 다음은 중고거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고거래 게시판 첨부파일 정보를 담은 USED_GOODS_FILE 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS은 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다. Column nameTypeNullable BOARD_ID VARCHAR(5) FALSE WRITER_ID VARCHAR(50) FALSE TITLE VARCHAR(100) FALSE CONTENTS VARCHAR(1000) FALSE PRICE NUMB.. 2023. 3. 26.
프로그래머스 재구매가 일어난 상품과 회원 리스트 구하기 재구매가 일어난 상품과 회원 리스트 구하기 문제 설명 다음은 어느 의류 쇼핑몰의 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블 입니다. ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다. Column nameTypeNullable ONLINE_SALE_ID INTEGER FALSE USER_ID INTEGER FALSE PRODUCT_ID INTEGER FALSE SALES_AMOUNT INTEGER FALSE SALES_DATE DATE FALSE 동일한 날짜, 회원 ID, 상품 ID .. 2023. 3. 4.
728x90