DB/MySQL

DB/MySQL

데이터베이스 단일 인덱스와 복합 인덱스의 차이와 활용법

복합 인덱스 알아보기복합 인덱스는 단어 그대로 여러 개의 컬럼 조합으로 생성된 인덱스이다.(idx_col1, idx_col2) 에 대해 인덱스를 설정하면, 명시한 컬럼 순서대로 인덱스가 정렬됩니다.B+ Tree 구조를 만들 때 idx_col1 컬럼에 대해 먼저 정렬을 하고, 동일한 값이 있다면 idx_col2를 기준으로 정렬하여 인덱스를 관리합니다.복합 인덱스 구조를 보면 첫 번째 컬럼을 먼저 조회하고 그다음에 두 번째 컬럼을 조회하는 것을 알 수 있습니다. 그래서 해당 인덱스를 제대로 사용하기 위해서는 순서에 맞게 Query를 구성해야 합니다.만약, idx_col2를 먼저 탐색하고 idx_col1을 탐색하게 where 조건문을 설정했다면, 올바르게 인덱스 탐색이 이루어지지 않을 수 있습니다. CREAT..

DB/MySQL

MySQL 인덱스를 통한 성능 최적화: 효과적인 인덱스 설계와 쿼리 튜닝 방법

머리말,실무를 진행하면서 개발했던 서비스에 추가 요구사항이 생겨 테이블 변경이 필요한 상황이었습니다.1:1 관계였던 테이블이 N:M 관계로 변해 반정규화나 매핑 테이블을 추가해서 요구사항에 맞게 재설계 과정이 필요했습니다. Why 일대일 관계가 다대다 관계가 됐는지,더보기기존 서비스에서는 특정 시간 대에 하나의 객실에 대해 문의 예약건을 받아 처리했습니다. (문의 하나당 객실 하나를 담당한다.)하지만, 해당 기능은 사용자뿐만 아니라 관리자(사내 임직원)들도 사용하는 기능이어서 문의 하나 당 하나의 객실을 담당하게 되면 문의를 등록하는 데 불편한 점이 있었습니다. 그래서 이를 하나의 문의에 여러 개의 객실을 관리할 수 있도록 ERD를 재설계하였습니다.* 1:N 관계로 하게 되는 경우 객실 정보를 제외한 나..

DB/MySQL

데이터베이스 성능 문제 해결: SQL 최적화와 쿼리 튜닝 방법

인덱스를 타지 않는 쿼리1. function or operation querySELECT * FROM employee WHERE UPPER(name) = 'AHN'; SELECT * FROM employee WHERE YEAR(worked_at) = 2023; SELECT * FROM employee WHERE age + 1 = 100; 인덱스 컬럼에 함수 또는 연산을 수행하는 경우 데이터베이스는 인덱스를 사용하지 못합니다. 이유:인덱스는 Key의 순서대로 정렬되어 있습니다.이를 함수나 연산을 통해 인덱스에 변환을 수행하면, 기존 인덱스와의 순서가 불일치하는 문제가 생겨 인덱스를 통해 탐색을 하지 못합니다. 2. Like문 검색에서 와일드카드의 위치SELECT * FROM employee WHERE na..

DB/MySQL

[Mysql] Mysql 쿼리 최적화, 성능 최적화 - 기본편

Mysql 쿼리 속도 개선 4 가지SQL 쿼리에 적용된 실행 계획 확인하는 방법 - explainexplain select * from crew 1. select 실행 시 필요한 column만 뽑기많은 필드 값을 불러올수록 데이터베이스는 더 많은 로드를 부담합니다.column 중에 불필요한 값을 가진 필드가 있다면 과감히 제외하고, select 절에 필요한 열만 지정해 불러오는 것이 좋습니다. 2. 조건 부여 시, 기존 DB 값에 별도의 연산을 걸지 않기-- InefficientSELECT m.id, ANY_VALUE(m.title) title, COUNT(r.id) r_count FROM movie m INNER JOIN rating r ON m.id = r.movie_id WHERE FLOOR(r.v..

kylo
'DB/MySQL' 카테고리의 글 목록