인덱스(Index)에 대해 설명해주세요. #5
Replies: 9 comments
-
기본 질문1. 데이터베이스 인덱스(Index)란 무엇이며 왜 필요한가요?인덱스(Index)는 데이터베이스에서 원하는 데이터를 빠르게 찾기 위해 사용하는 자료구조입니다. 책의 목차를 통해 원하는 페이지를 빠르게 찾는 것과 같은 원리입니다. 인덱스가 없다면 데이터베이스는 모든 데이터를 처음부터 끝까지 확인하는 Full Table Scan을 수행해야 하지만, 인덱스를 사용하면 필요한 데이터가 저장된 위치를 빠르게 찾아 접근할 수 있습니다. 따라서 조회(SELECT) 성능을 크게 향상시킬 수 있으며, 특히 데이터의 양이 많을수록 효과가 커집니다. 2. 데이터베이스에서 인덱스는 어떤 자료구조로 구현되며, 그 이유는 무엇인가요?대부분의 관계형 데이터베이스(MySQL, PostgreSQL 등)는 인덱스를 B+Tree 구조로 구현합니다. B+Tree는 데이터가 항상 정렬된 상태로 저장되며, 트리의 높이가 낮아 검색, 삽입, 삭제를 모두 O(log N)의 시간 복잡도로 처리할 수 있습니다. 또한 리프 노드가 연결 리스트 형태로 이어져 있어 범위 조회(BETWEEN, <, >, ORDER BY)도 매우 효율적으로 수행할 수 있습니다. 반면 Hash는 동등 비교에는 빠르지만 범위 검색이 불가능하기 때문에 일반적인 데이터베이스 인덱스로는 B+Tree가 주로 사용됩니다. 3. 어떤 컬럼에 인덱스를 생성하는 것이 좋은지 설명해주세요.조회 조건(WHERE), 조인(JOIN), 정렬(ORDER BY), 그룹화(GROUP BY)에 자주 사용되는 컬럼에 인덱스를 생성하는 것이 좋습니다. 특히 특정 값을 빠르게 찾는 경우가 많고, 서로 다른 값의 종류가 많은(카디널리티가 높은) 컬럼일수록 인덱스의 효과가 큽니다. 반대로 값이 몇 개 없는 성별, 삭제 여부(Boolean) 같은 컬럼은 선택도가 낮아 인덱스 효과가 크지 않을 수 있습니다. 또한 조회 빈도와 데이터 변경 빈도를 함께 고려하여 생성하는 것이 중요합니다. 4. 인덱스의 장점과 단점에 대해 설명해주세요.인덱스의 가장 큰 장점은 조회 성능을 크게 향상시킬 수 있다는 점입니다. 조건 검색, 정렬, 조인 성능이 좋아져 응답 시간이 크게 단축될 수 있습니다. 하지만 인덱스도 별도의 자료구조이므로 저장 공간을 추가로 사용하며, INSERT, UPDATE, DELETE가 발생할 때마다 인덱스도 함께 수정해야 하므로 쓰기 성능이 저하됩니다. 따라서 모든 컬럼에 인덱스를 생성하는 것이 아니라 조회 성능 향상이 쓰기 비용보다 큰 경우에만 생성하는 것이 바람직합니다. 심화 질문1. 복합 인덱스(Composite Index)란 무엇이며, 컬럼의 순서가 중요한 이유는 무엇인가요?복합 인덱스는 두 개 이상의 컬럼을 하나의 인덱스로 묶어 생성한 인덱스입니다. B+Tree는 앞에서부터 순서대로 정렬되기 때문에 컬럼의 순서가 매우 중요합니다. 예를 들어 (name, age) 인덱스가 있다면 WHERE name = ? 또는 WHERE name = ? AND age = ?는 인덱스를 사용하여 조회할 수 있지만, WHERE age = ? 으로 구성된 SELECT문으로는 일반적으로 인덱스를 사용하여 조회 수 없습니다. 이를 **Leftmost Prefix Rule(최좌측 접두사 원칙)**이라고 하며, 실제 조회 패턴을 고려하여 컬럼 순서를 결정해야 합니다. 2. 카디널리티(Cardinality)와 선택도(Selectivity)는 무엇이며 인덱스 설계에 어떤 영향을 주나요?카디널리티는 컬럼에 존재하는 서로 다른 값의 개수를 의미하며, 선택도는 특정 조건이 전체 데이터 중 얼마나 적은 데이터를 선택하는지를 나타내는 지표입니다. 일반적으로 카디널리티가 높을수록 선택도도 높아져 인덱스의 효율이 좋아집니다. 예를 들어 주민등록번호처럼 거의 모두 다른 값은 인덱스 효과가 매우 크지만, 성별처럼 값이 두 개뿐인 컬럼은 대부분의 데이터를 조회하게 되어 인덱스의 효과가 낮습니다. 따라서 인덱스는 일반적으로 카디널리티가 높은 컬럼에 생성하는 것이 유리합니다. 3. 실행 계획(EXPLAIN)을 통해 어떤 내용을 확인할 수 있나요?EXPLAIN은 데이터베이스가 SQL을 어떻게 실행할 것인지 미리 보여주는 기능입니다. 이를 통해 어떤 인덱스를 사용하는지, Full Table Scan이 발생하는지, 예상 조회 행 수(rows), 조인 순서, 정렬이나 임시 테이블 사용 여부 등을 확인할 수 있습니다. 즉, 쿼리가 느린 원인을 분석하고 인덱스가 실제로 활용되는지 검증하는 데 매우 중요한 도구입니다. 4. 데이터베이스 옵티마이저는 항상 인덱스를 사용할까요? 그렇지 않다면 어떤 경우 Full Table Scan을 선택하나요?아닙니다. 옵티마이저는 비용(Cost)이 가장 낮은 실행 계획을 선택하기 때문에 인덱스가 있어도 Full Table Scan을 선택할 수 있습니다. 예를 들어 조회 대상이 테이블 대부분을 차지하는 경우, 선택도가 낮은 컬럼을 조회하는 경우, 인덱스를 사용해도 랜덤 I/O가 더 많이 발생하는 경우에는 전체 테이블을 한 번 읽는 것이 더 효율적일 수 있습니다. 따라서 인덱스가 존재한다고 해서 항상 사용되는 것은 아닙니다. 5. 인덱스를 사용해도 성능이 개선되지 않는 경우에는 어떤 상황이 있을까요?대표적으로 선택도가 낮은 컬럼을 조회하는 경우, 전체 데이터의 대부분을 조회하는 경우, 인덱스 컬럼에 함수나 연산을 적용하는 경우, LIKE 검색에서 앞에 %가 붙는 경우(LIKE '%abc')에는 인덱스를 제대로 사용할 수 없습니다. 또한 데이터 양이 매우 적은 테이블에서는 Full Table Scan 자체가 더 빠를 수도 있습니다. 따라서 인덱스는 단순히 생성하는 것이 아니라 실제 실행 계획(EXPLAIN)을 확인하며 효과를 검증해야 합니다. 추후 질문1. 커버링 인덱스(Covering Index)란 무엇인가요?커버링 인덱스는 쿼리에서 필요한 모든 컬럼이 인덱스 안에 포함되어 있어 테이블에 다시 접근하지 않아도 되는 인덱스를 의미합니다. 일반적으로 인덱스로 조건을 찾은 뒤 실제 데이터(Row)를 다시 읽는 과정이 발생하지만, 커버링 인덱스는 인덱스만 읽고 결과를 반환할 수 있으므로 추가 디스크 접근을 줄여 성능을 크게 향상시킬 수 있습니다. 2. 클러스터드 인덱스와 논클러스터드 인덱스의 차이를 설명해주세요.클러스터드 인덱스는 인덱스 자체가 실제 데이터의 저장 순서를 결정하는 인덱스입니다. 따라서 데이터가 인덱스 순서대로 저장되며 테이블당 하나만 존재할 수 있습니다. 반면 논클러스터드 인덱스는 실제 데이터와 별도로 저장되는 인덱스로, 데이터의 위치를 가리키는 포인터를 가지고 있습니다. 하나의 테이블에는 여러 개 생성할 수 있지만, 조회 시 실제 데이터 페이지를 한 번 더 읽어야 하는 경우가 많습니다. 3. B+Tree 대신 Hash Index를 사용하는 경우는 언제인가요?Hash Index는 =과 같은 동등 비교(Equal Search)에 매우 빠르며 평균 O(1)의 성능을 제공합니다. 하지만 데이터가 정렬되어 있지 않기 때문에 범위 검색(BETWEEN, <, >, ORDER BY)은 지원하지 않습니다. 따라서 캐시 시스템이나 Key-Value 저장소처럼 정확한 키 조회가 대부분인 환경에서는 Hash가 적합하고, 다양한 검색 조건을 지원해야 하는 일반적인 관계형 데이터베이스에서는 B+Tree가 더 적합합니다. 4. MySQL(InnoDB)에서 기본키가 클러스터드 인덱스인 이유를 설명해주세요.InnoDB는 기본키를 기준으로 실제 데이터를 저장하는 클러스터드 인덱스 구조를 사용합니다. 이렇게 하면 기본키 조회가 매우 빠르며, 논클러스터드 인덱스도 기본키 값을 저장하여 실제 데이터를 찾아가기 때문에 중복 저장 공간을 줄일 수 있습니다. 또한 데이터가 기본키 순서대로 저장되므로 범위 조회 성능도 향상됩니다. 반면 기본키가 너무 크거나 자주 변경되면 모든 보조 인덱스에도 영향을 미치므로, InnoDB에서는 변경되지 않는 작은 크기의 기본키를 사용하는 것이 권장됩니다. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
데이터베이스 인덱스(Index)란 무엇이며 왜 필요한가요? 데이터베이스에서 인덱스는 어떤 자료구조로 구현되며, 그 이유는 무엇인가요? 어떤 컬럼에 인덱스를 생성하는 것이 좋은지 설명해주세요.
인덱스의 장점과 단점에 대해 설명해주세요.
|
Beta Was this translation helpful? Give feedback.
-
1. 데이터베이스 인덱스(Index)란 무엇이며 왜 필요한가요?데이터를 더빨리 찾기위해 별도로 만들어 두는 정렬된 자료구조다. 인덱스가 없으면 처음부터 다 훑어야 한다. 인덱스가 있으면 처음부터 다 훑을 필요없이 더 빨리 찾을 수 있다. 2. 데이터베이스에서 인덱스는 어떤 자료구조로 구현되며, 그 이유는 무엇인가요?B+ tree 로 구현된다. B+ tree 란?
그 이유는?
3. 어떤 컬럼에 인덱스를 생성하는 것이 좋은지 설명해주세요.인덱스를 만드는건 공짜가 아니다. 따라서 만들었을 때 이득이 큰 칼럼에서만 생성하는게 좋다.
4. 인덱스의 장점과 단점에 대해 설명해주세요.장점
단점
|
Beta Was this translation helpful? Give feedback.
-
기본질문1. 데이터베이스 인덱스(Index)란 무엇이며 왜 필요한가요?데이터베이스에서 인덱스(Index)란 추가적인 쓰기 작업과 저장공간을 활용하여 테이블에서 데이터를 빠르게 검색할 수 있도록 도와주는 자료구조입니다. 데이터베이스는 기본적으로 전체 테이블을 순차탐색(Full Table Scan)하는데, 인덱스를 사용하지 않은 상황이라면 순차탐색을 해야 합니다. 순차탐색은 전체를 비교하여 탐색하기 때문에 처리 속도가 떨어집니다. 이 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 하는 것입니다. 2. 데이터베이스에서 인덱스는 어떤 자료구조로 구현되며, 그 이유는 무엇인가요?인덱스를 구현하기 위해서는 다양한 자료구조를사용할 수 있는데, 대표적으로 해시 테이블(Hash Table) 과 B+ 트리가 있습니다. [ 해시 테이블(Hash Table) ] 해시 테이블은 (key, value) 의 형태로 데이터를 저장하는 자료구조로 빠른 데이터 검색이 필요할 때 유용합니다. key 값을 이용하여 고유한 인덱스를 생성하여 해당 key에 저장된 value 을 조회하는 구조이다. 해시 테이블의 시간복잡도는 O(1) 이며 매우 빠른 검색을 지원합니다. 하지만 데이터베이스 인덱스에서 해시 테이블이 사용되는 경우는 제한적인데, 그러한 이유는 해시가 등호( = ) 연산에만 특화되어있기 때문입니다. 해시 함수는 값이 조금이라도 달라지면 완전히 다른 해시 값을 생성하는 데 이러한 특성에 의해 부등호 연산이 자주 사용되는 데이터베이스 검색을 위해서는 해시 테이블이 적합하지 않습니다. 위와 같은 이유로 데이터베이스의 인덱스에서는 B+ 트리가 일반적으로 사용됩니다. [ B+트리 ] B+트리는 데이터베이스의 인덱스를 위해 자식 노드가 2개 이상인 B-트리를 데이터의 효율적인 삽입, 검색, 삭제를 하도록 하는 자료구조입니다. B+트리는 모든 노드에 데이터(value)를 저장했던 B-트리와 다른 특성을 가지고 있는데,
데이터베이스의 인덱스 컬럼은 부등호를 이용한 순차탐색 연산이 자주 발생될 수 있습니다. 그렇기에 B-트리의 리프 노드들을 연결 리스트로 연결하여 순차탐색을 용이하게 하는 등 B-트리를 인덱스에 맞게 최적화 하였습니다. 이러한 이유로 B+트리가 O(log2n)의 시간복잡도를 갖지만 해시 테이블보다 인덱스로서 더욱 적합한 자료구조가 된 것입니다. 그 외에도 Unique Index, Composite Index, Bitmap Index, Full-Text Index 등 다양한 인덱스의 형태가 존재합니다. 3. 어떤 컬럼에 인덱스를 생성하는 것이 좋은지 설명해주세요.
4. 인덱스의 장점과 단점에 대해 설명해주세요.[장점]
[단점]
|
Beta Was this translation helpful? Give feedback.
-
책이 있다면 모든 페이지를 넘겨 필요한 내용을 찾는거보다 목차나 저자가 남긴 색인을 통해 내용을 찾는게 더 편하기 때문이다.
데이터 베이스는 전체 테이블을 순차 탐색 하는데 인덱스를 스캔하지 않고 접근하기 때문에 데이터를 빠르게 찾을 수 있기때문이다
|
Beta Was this translation helpful? Give feedback.
-
데이터베이스 인덱스(Index)란 무엇이며 왜 필요한가요?데이터는 디스크에 데이터베이스 관리 시스템이 디스크와 메모리 사이에서 읽고 쓰는 최소 단위인 데이터 페이지 형태로 저장이 됩니다. 만약 데이터를 조회한다면 관리 시스템은 모든 페이지를 읽는 풀 테이블 스캔이 발생하게 됩니다. 이는 입출력 부하가 크고 이를 해소하기 위해 데이터베이스는 인덱스를 사용하고 인덱스는 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조입니다. 데이터베이스에서 인덱스는 어떤 자료구조로 구현되며, 그 이유는 무엇인가요?인덱스는 주로 B+Tree 구조로 구현이 됩니다. 왜냐하면 B+Tree는 실제 데이터를 최하단의 노드(리프 노드)에만 저장하고 노드 중간은 인덱스 키 값만 저장하게 됩니다. 이런 구조의 특징 덕분에 중간 노드의 높이가 줄어들게 되면서 디스크 탐색 횟수를 줄여줘 입출력 성능을 높여줍니다. 또한 리프 노드는 서로 양방향 연결 리스트로 서로가 연결되어 있기 때문에 범위 검색을 할때 첫 데이터를 찾고 이후 범위의 데이터에 대해선 연결 리스트로 조회가 가능하기 때문에 트리를 재탐색을 할 필요가 없어져 입출력 성능을 더욱 높여줍니다. 이런 특징들 때문에 인덱스는 주로 B+Tree 자료구조로 구현됩니다. 어떤 컬럼에 인덱스를 생성하는 것이 좋은지 설명해주세요.인덱스는 중복이 적고 고유한 값을 가지는 속성, 정렬 조회가 자주 이루어지는 속성에 생성하는 것이 좋습니다. 왜냐하면 인덱스로 조회한 값이 1건 혹은 소수라면 인덱스의 사용 효율이 극대화되기 때문입니다. 만약 조회하려는 값이 중복이 많아 다수가 된다면 그 데이터 모두를 찾기 위해 인덱스를 여러 번 순회하며 찾을 것 입니다. 그 과정은 결국 풀 테이블 스캔과 다를바 없는 형태가 되고 오히려 조회 과정에서 중간 노드들을 거치기 때문에 더 많은 입출력이 발생하게 될 수 있습니다. 따라서 고유한 값을 가지는 속성에 생성하는 것이 좋습니다. 그리고 인덱스를 구현하는 B+Tree 구조는 리프 노드가 정렬된 상태로 저장되는 특징 때문에 정렬 연산을 수행하는데 큰 장점을 가집니다. 따라서 ORDER BY, GROUP BY 와 같은 정렬이 필요한 조회에 큰 효율을 냅니다. 따라서 정렬 조회가 자주 이루어지는 속성에 대해 인덱스를 생성한다면 큰 장점이 될 것 입니다. 인덱스의 장점과 단점에 대해 설명해주세요.인덱스의 장점은 인덱스의 사용 목적에서 알 수 있듯이 빠른 조회, 정렬 조회의 효율이 있고, 단점으론 저장 공간 비대, 저장 과정에서 발생하는 연산의 증가를 꼽을 수 있습니다. 인덱스는 B+Tree 구조를 구현하기 위해 데이터 말고 노드를 추가 저장하기 때문에 저장 공간을 많이 차지하게 되고, B+Tree는 리프 노드가 정렬되어 저장되기 때문에 데이터 생성, 수정, 삭제 (CUD)에서 매번 트리를 재정렬하는 연산이 증가하게 되는 단점이 있습니다. 하지만 이렇게 B+Tree로 데이터를 정렬하고 구조화하여 저장하는 덕분에 조회 과정에서 빠른 조회가 가능하게 되고, 정렬 조회 또한 효율적으로 이루어지게 됩니다. 결론적으로 인덱스는 CUD 과정에서 단점을 감수하며 R 과정에 큰 장점을 발휘하는 기능입니다. |
Beta Was this translation helpful? Give feedback.
-
|
데이터베이스 인덱스(Index)란 무엇이며 왜 필요한가요? -- 데이터베이스에서 인덱스는 어떤 자료구조로 구현되며, 그 이유는 무엇인가요? 어떤 컬럼에 인덱스를 생성하는 것이 좋은지 설명해주세요. 인덱스의 장점과 단점에 대해 설명해주세요. |
Beta Was this translation helpful? Give feedback.
-
기본 질문데이터베이스 인덱스(Index)란 무엇이며 왜 필요한가요?인덱스란 데이터를 빠르게 찾을 수 있게( 데이터베이스에서 인덱스는 어떤 자료구조로 구현되며, 그 이유는 무엇인가요?해시와 Btree 등 여러 자료구조를 이용할 수 있지만, 일반적으로 Btree로 구현된다. 어떤 컬럼에 인덱스를 생성하는 것이 좋은지 설명해주세요.가장 먼저 고려해야 할 사항은 데이터 개수이다. 인덱스의 장점과 단점에 대해 설명해주세요.
심화 질문복합 인덱스(Composite Index)란 무엇이며, 컬럼의 순서가 중요한 이유는 무엇인가요?카디널리티(Cardinality)와 선택도(Selectivity)는 무엇이며 인덱스 설계에 어떤 영향을 주나요?실행 계획(EXPLAIN)을 통해 어떤 내용을 확인할 수 있나요?데이터베이스 옵티마이저는 항상 인덱스를 사용할까요? 그렇지 않다면 어떤 경우 Full Table Scan을 선택하나요?인덱스를 사용해도 성능이 개선되지 않는 경우에는 어떤 상황이 있을까요?추후 질문커버링 인덱스(Covering Index)란 무엇인가요?클러스터드 인덱스와 논클러스터드 인덱스의 차이를 설명해주세요.B+Tree 대신 Hash Index를 사용하는 경우는 언제인가요?MySQL(InnoDB)에서 기본키가 클러스터드 인덱스인 이유를 설명해주세요. |
Beta Was this translation helpful? Give feedback.



Uh oh!
There was an error while loading. Please reload this page.
-
📆 일자: 26년 7월 1일(수)
발제 의도
기본 질문 (필수)
심화 질문 (선택)
추후 질문 (선택)
Beta Was this translation helpful? Give feedback.
All reactions