SQL

    MySQL Select 조회 성능을 위한 Index 적용기

    MySQL Select 조회 성능을 위한 Index 적용기

    문제발생 어느 날부터 “NFT 연관 키워드 사이트 [링크]“ 에서 키워드를 불러오는데 10초이상이 소요 문제원인 프론트단은 빨리 로딩되는 반면 백엔드단의 api를 불러오는데 시간이 소요됨 소요시간: 10.35초 데이터가 10,000 ~ 100,000 일 때는 체감되지않았지만 약 5,000,000 ~ 9,700,000 (현재) 값을 where절을 이용해여 select 시 체감되는 시간의 증가 현재 데이터양 해결방안 1. 현재 필요한 데이터 외 나머지를 삭제한다. 2. where절에 사용되는 컬럼을 INDEX로 설정해준다. 채택 사실상 현재는 필요없는 데이터를 지우는 1번 방법이 더 낫지만 많은 데이터를 핸들링해볼 수 있는 2번 방법으로 채택 SELECT 컬럼 FROM 테이블명 WHERE cerated_da..

    스프링 테스트에서의 @Transactional

    테스트 케이스에서의 @Transactional @Transactional ? Spring의 JPA에서 많이 사용되는 기술로, 선언적 트랜잭션이라 부른다 트랜잭션을 시작하고 Commit 을 시켜주고, Exception 발생 시 Rollback을 시켜준다. 이를 위해 Transaction 어노테이션이 실행되기 전에 transaction begin 코드를 삽입하여 메서드가 실행 된 후 transaction commit 코드를 삽입하여 객체 변경 감지를 수행하게 유도한다. 다수의 트랜잭션에서 발생할 수 있는 문제 Dirty Read A 트랜잭션이 어떤 값을 1에서 2로 변경하고 아직 커밋하지 않은 상태에서 B 트랜잭션이 그 값을 읽는 경우 2가 조회된다. 트랜잭션 B가 2를 조회 한 후 A가 Rollback된다..

    트랜잭션 (Transaction)

    트랜잭션(Transaction) ? 데이터베이스의 상태를 변화시키기위해 수행하는 작업의 단위 또는 한번에 모두 수행되어야 할 일련의 연산 특징 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 직업단위 하나의 트랜잭션은 Commit 되거나 Rollback된다. 성질 원자성 (Atomicity) 트랜잭션의 연산은 데이터베이스에 모두 반영되거나 전혀 반영되지 않아야한다. 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야하며, 어느 하나라도 오류가 나면 트랜잭션은 전부 취소된다. 일관성 (Consistency) 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다..

    [SQL] Index ( 인덱스 ) 의 구조와 동작

    1. INDEX ? 지정한 컬럼들을 기준으로 메모리 영역에 일종의 목차 를 생성하는 것이다. INSER, UPDATE, DELETE(Command)의 성능을 희생하고 SELECT(Query)의 성능을 향상시킨다. 즉, “내가 원하는 부분을 쉽고 빠르게 찾아서 전달해주는 역할”을 한다. “정보 검색”에 있어 성능을 최적화시켜줄 수 있는 유용한 도구 2. INDEX의 동작 동작순서 DMBS는 INDEX를 다향한 알고리즘으로 관리를 하고 있다. 일반적으로 사용되는 자료구조는 B+Tree이다. a. `Index Table`에서 `WHERE`에 포함된 값을 찾는다. b. 해당 값의 `table_id [PK]`을 가져온다. c. 가져온 `table_id [PK]`값 으로 원본 테이블에서 값을 조회한다. B+Tree..