티스토리 뷰
위 내용은 업무에 바로 쓰는 SQL 튜닝 중 2장의 인덱스와 뷰를 정리한 글입니다.
인덱스
데이터베이스에서 키값으로 실제 데이터 위치를 식별하고 데이터 접근 속도를 높이고자 생성되는, 키 기준은 정렬된 오브젝트이다. 예를 들어, 천만 건의 데이터가 있는 테이블이 있을 때, 원하는 정보를 찾기 위해 첫 행부터 마지막 행까지 순차적으로 검색하는 방법은 데이터 양이 많아질수록 검색 속도가 급격히 느려지고 비효율적이다. 이러한 문제를 해결하기 위해 인덱스를 사용하면 키워드 기반으로 검색이 가능하여 데이터를 빠르게 찾을 수 있다. 인덱스는 책의 목차와 같은 역할을 하며, DBMS이 효율적인 검색을 수행할 수 있도록 돕다.
고유 인덱스와 비고유 인덱스
고유 인덱스
고유 인덱스는 말그래도 열들의 데이터가 유일하다는 의미이다. 차례로 정렬되는 인덱스 열의 데이터는 서로 중복되지 않고 유일성을 유지한다. 만약 동일 데이터가 삽입 시 중복 체크에서 오류가 발생하며 생성 시 기존 데이터의 중복 여부를 검증하므로 추가 비용이 발생할 수 있다. "ADD UNIQUE INDEX 이름_인덱스" 구문으로 생성한다. 참고로 흔히 거론되는 인덱스는 비고유 인덱스이다.
기본키와 고유 인덱스 차이점
모두 데이터의 유일성을 보장하지만 기본키에는 NULL을 입력할 수 없지만 고유 인덱스는 입력 가능하다.
비고유 인덱스
데이터의 유일한 속성만 제외한 키이다. 데이터가 신규 등록되어도 인덱스가 재정렬되더라도 중복체크를 거치지 않고 단순한 정렬 작업만 수행한다. "ADD INDEX 이름_인덱스" 구문으로 생성한다.
뷰
가상 테이블이다. 예를 들어 학생 테이블에 (학번, 이름, 연락처) 컬럼이 있다면 그중 학생_뷰 테이블에는 (학번, 이름)만 조회하도록 생성했다. 서로의 테이블의 데이터가 변경되면 둘 다 적용된다. 연락처를 직접적으로 공개하지 않고도 학생_뷰로 제한된 정보만 제공할 수 있다. 즉 시스템을 안전하게 운영하고 개발할 수 있는 환경을 제공한다.
뷰를 사용하는 이유
일부 데이터에 대해서만 공개, 노출에 민감한 데이터에 대해서는 제약을 설정할 수 있어 보안성에 좋다. 여러 개의 테이블을 병합해서 활용할때 성능을 고려한 최적한 된 뷰를 생성함으로써 일관된 성능을 제공한다.
끝.
'개발서적' 카테고리의 다른 글
[CleanCode] 함수 인수 (0) | 2024.08.07 |
---|---|
[CleanCode] 함수를 만들 때 작게 만들어라 (0) | 2024.08.07 |
[CleanCode] 검색하기 쉬운 이름을 사용하라 (0) | 2024.07.30 |
- Total
- Today
- Yesterday
- find
- Python
- Upper
- If
- Method
- zip
- operators
- for
- isdigit
- isalpha
- function
- index
- Lambda
- bool
- Built-in Functions
- counter
- permutations
- Lower
- combinations
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |