Engineering/Database
-
[MySQL] 커버링 인덱스Engineering/Database 2020. 6. 21. 23:54
커버링 인덱스는 쿼리의 조건을 충족시키는데 필요한 모든 데이터들을 인덱스에서만 추출할 수 있는 인덱스를 의미합니다. 커버링 인덱스는 B-Tree 인덱스를 스캔하는 것만으로도 원하는 데이터를 가져 올 수 있으며, 컬럼을 읽기 위해 디스크에 접근하여 데이터 블록을 읽지 않아도 됩니다. 인덱스는 행 전체의 크기보다 훨씬 작으며, 인덱스의 값에 따라 정렬이 되기 때문에 Sequential Read 접근이 가능해집니다. 따라서 커버링 인덱스를 활용하면 쿼리의 성능을 비약적으로 향상시킬 수 있습니다. 먼저 커버링 인덱스의 성능에 대해 테스트를 해보겠습니다. 테이블 생성 테이블은 아래와 같은 스키마로 생성하였습니다. create table membertest ( member_no int auto_increment, ..
-
[MySQL] 인덱스 스캔Engineering/Database 2020. 6. 19. 23:55
인덱스를 통해 테이블의 레코드를 읽는 것은 인덱스를 거치지 않고 바로 테이블의 레코드를 읽는 것보다 높은 비용이 드는 작업입니다. 테이블의 레코드가 총 100만 건이고, 그 중에서 50만 건을 읽어야 할 때, 테이블을 모두 읽어서 필요 없는 50만 건을 버리는 것이 효율적인지, 인덱스를 통해 필요한 50만 건만 읽어 오는 것이 효율적인지 판단해야 합니다. 일반적인 DBMS의 옵티마이저에서는 인덱스를 통해 레코드를 1건 읽는 것이 테이블에서 직접 레코드를 읽는 것보다 4 ~ 5배 정도 더 많은 비용이 드는 작업인 것으로 예측합니다. 즉, 인덱스를 통해 읽어야하는 레코드의 건 수가 전체 테이블의 레코드의 20 ~ 25%를 넘어서면 인덱스를 이용하지 않고 직접 테이블을 모두 읽어서 필요한 레코드만 가려내는 필..
-
[MySQL] 인덱스 정리Engineering/Database 2020. 6. 17. 23:56
인덱스란? 인덱스란 select의 성능을 향상하기 위해 지정한 컬럼들을 기준으로 일종의 목차를 생성하는 것입니다. 책의 찾아보기를 보면 내용을 쉽고 빠르게 찾아갈 수 있도록 "ㄱ", "ㄴ", "ㄷ"과 같이 순서대로 정렬되어 있는데, DBMS의 인덱스도 마찬가지로 컬럼의 값을 주어진 순서로 미리 정렬해서 보관합니다. 인덱스는 select에 대해서는 성능 향상을 보이지만, insert, update, delete에 대해서는 성능에 불리합니다. 인덱스의 세 가지 분류 B-Tree 인덱스 비트맵 인덱스 해시 인덱스 B-Tree 인덱스 B-Tree 인덱스는 이름 그대로 데이터를 트리 구조로 저장하는 형태의 인덱스입니다. 앞의 B는 Balanced 를 의미하며, 이름 그대로 균형 잡힌 뛰어난 범용성을 인정받아 가장..
-
Redis 개념 정리Engineering/Database 2019. 12. 19. 00:50
Redis는 "REmote DIctionary System" 의 약자로, 디스크가 아닌 메모리 기반의 Key / Value Store 입니다. Key / Value Store 라는 구조로 다양한 자료구조를 지원합니다. In memory 라는 특성답게 고성능이며, 캐싱, 세션 관리, 메시지 큐 등으로 다양하게 활용되고 있습니다. 레디스는 모든 데이터가 메모리에 저장되지만, 서버가 내려갔다가 올라가는 상황에서 메모리에 상주한 데이터들이 휘발되지 않도록 디스크에 스냅샷을 저장할 수 있습니다. 다양한 데이터 타입 레디스에서는 크게 5가지의 타입을 사용할 수 있다. 1. String 일반적인 문자열을 저장하며, 키에 넣을 수 있는 데이터의 최대 크기는 512 MB 입니다. Text 뿐만 아니라 정수형이나 JPG ..