Engineering/Database
-
[Real MariaDB] 최적화 - 정렬의 처리 방식Engineering/Database 2021. 9. 4. 17:13
정렬의 처리 방식 쿼리에 order by 가 사용되면 반드시 다음 3가지 방식 중 하나로 정렬이 처리된다. 일반적으로 밑쪽에 있는 정렬 방법으로 갈수록 처리는 점점 느려진다. 정렬 처리 방법 실행 계획의 Extra 코멘트 인덱스를 사용한 정렬 별도의 내용 표기 없음 드라이빙 테이블만 정렬 (조인이 없는 경우 포함) "Using sort"가 표시됨 조인 결과를 임시 테이블로 저장한 후, 임시 테이블에서 정렬 "Using temporary; Using filesort"가 같이 표시됨 인덱스를 사용한 정렬 반드시 ORDER BY에 명시된 컬럼이 제일 먼저 읽는 테이블(조인이 사용된 경우 드라이빙 테이블)에 속하고, ORDER BY의 순서대로 생성된 인덱스가 있어야 한다. WHERE 절에 첫 번째 읽는 테이블의..
-
[Real MariaDB] 최적화 - 풀 테이블 스캔, ORDER BY, 소트 버퍼Engineering/Database 2021. 8. 30. 03:27
풀 테이블 스캔 테이블의 데이터를 인덱스를 사용하지 않고 처음부터 끝까지 읽어서 작업을 처리한다. MariaDB의 옵티마이저는 다음과 같은 조건이 일치할 때 주로 풀 테이블 스캔을 선택한다. 테이블의 레코드 건수가 너무 작아서 인덱스를 통해서 읽는 것보다 풀 테이블 스캔을 하는 편이 더 빠른 경우(일반적으로 테이블이 페이지 1개로 구성된 경우) WHERE 절이나 ON 절에서 인덱스를 이용할 수 없는 경우 인덱스 레인지 스캔을 사용할 수 있는 쿼리라고 하더라도 옵티마이저가 판단한 조건 일치 레코드 건수가 너무 많은 경우 (인덱스의 B-Tree 를 샘플링해서 조사한 통계 정보 기준) max_seeks_for_key 변수를 작게 설정하여 풀 테이블 스캔보다 인덱스 레인지 스캔을 더 선호하도록 유도할 수 있다..
-
[Redis] Redis 기초 정리하기Engineering/Database 2021. 8. 8. 20:43
https://www.youtube.com/watch?v=mPB2CZiAkKM&t 본 포스트는 우아한테크 세미나의 우아한 Redis 영상을 정리한 내용입니다. Redis? 레디스는 In-Memroy 기반의 Data Structure Store이다. 인메모리 기반의 특성으로 인하여 고성능이며, 주로 캐시 용도로 많이 사용된다. 인메모리 기반이기 때문에 서버가 재시작되면 휘발된다. (Redis Persistence를 통해서 일정 주기마다 데이터들을 디스크에 스냅샷 형태로 백업이 가능하다.) Redis에서 지원하는 자료구조 Redis는 Key-Value Store 구조로써 아래와 같은 자료구조를 지원한다. Strings Sets Sorted Sets Lists Hashes Bitmaps Bitfields Hy..
-
[MySQL] Explain 실행 계획Engineering/Database 2020. 6. 23. 23:25
explain 명령어 select문을 어떠한 방식으로 수행하여 데이터를 가져올 것인지에 대한 실행 계획을 출력하는 명령어입니다. 사용 방법은 질의하고자 하는 select 쿼리 앞에 explain 키워드를 붙여서 사용합니다. 실행 계획은 아래와 같은 형식으로 표현됩니다. explain select * from table 만약 위와 같은 포맷이 아닌 json 포맷으로 출력하고 싶다면 아래와 같은 명령어를 사용하면 됩니다. explain format = json select * from table 이제 각 컬럼별로 어떤 의미를 나타내는지 살펴보겠습니다. id select 쿼리별로 부여되는 식별자 값입니다. 만약 하나의 select 문에서 여러 개의 테이블을 조인하면 조인되는 테이블의 개수만큼 실행 계획 레코드..