- [ 학습기록/CS 공부 ][DB/쉬운코드] 인덱스 (EXPLAIN/B 트리)2024-05-16 04:31:19인덱스SELECT * FROM customer WHERE name = 'Jennie';customer 테이블에서 Jennie라는 이름을 가진 소비자를 찾는 상황을 가정해보자. `name`에 인덱스가 걸려있지 않다면 해당 쿼리는 customer 테이블을 풀 스캔하게 된다. O(n) 이는 모든 레코드를 하나 하나 확인하므로 성능 저하를 일으킨다. 하지만 인덱스를 사용하면 풀 스캔보다 더 빠르게 데이터를 조회할 수 있다. O(log n) 즉, 인덱스는 조건을 만족하는 레코드를 빠르게 조회하기 위해 사용한다. 인덱스는 쿼리 실행 속도를 향상시키지만 부작용도 존재한다.테이블을 수정할 때마다 인덱스도 변경된다.인덱스별로 추가적인 저장 공간이 필요하다.💡 커버링 인덱스 : 인덱스만으로 조회하려는 속성들을 모두 커버..
- [ backend/데이터베이스 ][mysql] 성능 최적화 1편 (인덱스/커버링 인덱스)2024-02-05 22:44:23데이터베이스 성능에는 테이블, 쿼리, 설정 등 다양한 수준의 요소들이 영향을 미친다. 최적화를 위해 소프트웨어, 하드웨어 수준에서 조절할 수 있지만 이 글에서는 하드웨어 최적화는 다루지 않을 것이다. 데이터베이스 최적화최적화 방법을 살펴보기 전에 아래 질문으로 어떤 점을 고려해야 하는지 간단히 알아보자.테이블은 올바른 데이터 유형의 열을 가지고 있고 적절한 수의 열을 갖추고 있는가인덱스가 적절히 구성되어 있는가각 테이블에 적합한 스토리지 엔진을 사용하고 해당 엔진의 강점과 기능을 활용하고 있는가디스크 낭비를 줄이고 I/O 시간을 단축하기 위해 압축된 테이블을 사용하고 있는가동시성을 위해 적절한 락 전략을 사용하고 있는가메모리 캐싱 영역을 올바른 크기로 설정했는가 SQL문 최적화sql문은 데이터베이스를 조..
- [ 학습기록/CS 공부 ][DB] 인덱스 (clustered/secondary)2024-02-04 03:14:49clustered Index (primary)클러스터형 인덱스는 데이터베이스를 정렬하여 인덱스의 순서와 일치하도록 만든다. 물리적인 저장 순서를 변경하기 때문에 하나의 테이블에는 하나의 클러스터형 인덱스만 존재할 수 있다.⭐ 클러스터형 인덱스는 물리적인 레코드 순서를 정렬한다!InnoDB에서 클러스터형 인덱스는 기본키를 의미한다. InnoDB는 기본키를 기준으로 테이블을 정렬하여 쿼리 속도를 향상시키는데, 이는 클러스터형 인덱스를 변경하는 데 비용이 많이 들기 때문이다.🚨 클러스터형 인덱스는 테이블을 정렬하기 때문에 자주 수정되는 값을 클러스터형 인덱스로 설정하면 테이블이 계속 정렬된다. secondary Index (non-clustered)보조 인덱스는 비클러스터형 인덱스다. 클러스터형 인덱스와 달리..
- [ 학습기록/CS 공부 ][DB] 인덱스 (B 트리)2024-02-04 00:39:39인덱스란? 인덱스는 책의 목차와 유사하다. 책을 읽을 때 목차를 이용하면 원하는 내용을 빠르게 찾아 읽을 수 있다. 마찬가지로 테이블도 인덱스를 이용하여 원하는 데이터를 빠르게 조회할 수 있다. 데이터베이스에서 인덱스는 테이블에 대한 검색 속도를 높여주는 자료 구조를 의미한다. 특정 컬럼에 인덱스를 생성하면 전체 테이블을 스캔 (full scan) 하는 대신 인덱스를 참조하여 원하는 결과를 빠르게 조회할 수 있다. B 트리 인덱스는 데이터를 미리 정렬하여 검색 연산의 성능을 향상시킨다. 트리 알고리즘은 검색 및 정렬 연산에서 효과적인 자료 구조이므로 인덱스는 트리를 사용하여 구현된다. 💡 균형 잡힌 이진 트리의 경우 O(log n)의 시간 복잡도를 갖는다. 인덱스는 주로 B 트리로 구현되는데, B 트리는..