본문 바로가기

데이터베이스

[SQL] B-Tree 인덱스 인덱스 종류 중에서 가장 흔히 쓰이는 B-Tree 인덱스 입니다. 프로그래밍 해보신분들 중에 자료구조 들으신분들은 조금 친숙하실텐데요. B-Tree(이하 비트리) 를 구성할 당시에는 각 데이터가 저장되어 있는 데이터 블록으로 부터 해당 컬럼을 이용해서 인덱스를 만듭니다. 그리고 위에 보시는 Root 블록으로 부터 Branch 블록, Leaf 블록으로 구성합니다. 데이터 블록에서 Leaf 블록을 구성할 때에는 해당 컬럼을 정렬해서 만들어 집니다. 이중 Leaf 블록이 데이터 블록의 해당 로우(ROW)에 접근할 수 있는 ROW ID를 가지고 있구요. 그 상위 단계인 Branch와 Root 에서는 각 하위 단계에 접근 할 수 있는 키값 즉 블록의 주소를 가지고 있습니다. 그리고 각 Branch 블록과 Root.. 더보기
[SQL] 색인기능, INDEX! 여러분은 보통 책에서 원하는 정보를 찾을때 어떻게 찾으세요? 단순히 책을 처음부터 한장한장 찾으시면서 찾으시진 않으시겠죠? 다들 앞부분에 있는 목차를 찾거나 뒤의 색인 또는 INDEX를 찾아서 원하는 키워드를 찾아 해당 페이지를 펼칠 겁니다. 이렇게 데이터베이스에서도 해당 정보를 찾을때 책의 뒷편에서 볼수 있는 인덱스(INDEX)를 이용합니다. 보통 데이터베이스는 엄청난 자료를 저장하고 있기때문에 하나의 자료를 찾기 위해서는 사람이 책에서 정보를 찾듯, 두가지 방법을 쓸 수 있는데요. 데이터베이스에서 원하는 정보(데이터)를 담고 있는 테이블 전체를 메모리에 저장시켜서 찾는 방법, 그러니까 저장되어 있는 데이터를 처음부터 이잡듯 뒤져서 정보를 찾는 겁니다. 이를 'FULL-TABLE SCAN' 방식이라고 .. 더보기
[SQL] 연속되는 숫자, SEQUENCE(시퀀스)! 우리가 학급에서 학생들에게 번호를 부여할때 1번부터 차례대로 최대 학생수까지 번호가 배정됩니다. 이 번호는 각 학생들을 구별할 수 있는 하나의 체계로서 데이터베이스에서는 기본키로 설정이 되는데요, 문자나 어떤 특정한 값이 아닌 이렇게 숫자로 각 데이터들을 구분한다고 할때, 사용되는 것이 SEQUENCE(시퀀스) 입니다. 시퀀스를 설정하게 되면 자료입력시에 순서대로 번호가 입력이 되는데, 한가지 예로 우리가 잘 알고 있는 hr 스키마의 employees 테이블을 살펴볼 수 있습니다. 어느 회사에서는 각 사원들이 입사를 할때 사원번호를 부여한다라고 할때, 이 사원번호는 그 사원을 인식할 수 있는 유일무일한 체계입니다. 다른 사원이 그 사원번호를 가질 수 없다는 말입니다. 이렇게 사원들을 관리하는 employ.. 더보기
[SQL] 제약조건, Constraint(NOT NULL, UNIQUE, PRIMARY KEY(기본키), FOREIGN KEY(외래키))! 테이블 작성시에 Constraint를 사용해서 입력하는 자료에 대해서 제약, 즉 규칙을 정해줄 수 있는데요. 이때 정해진 제약에 따라서 데이터가 입력이 됩니다. 제약에 배반된다면 자료 입력이 거부되면서 오류가 납니다. 즉, 데이터 무결성(Data Integrity)을 지키기 위한 데이터 무결성 제약조건(Integrity Constraint)에 대해서 알아볼까 합니다. 참고로, 네이버 지식백과에서는 데이터 무결성에 대해서 다음과 같이 밝히고 있는데요. "데이터를 인가되지 않은 방법으로 변경할 수 없도록 보호하는 성질" 쉽게 말하면, 권한이 부여된 계정이나 사람만이 접근 가능하고, 정확하고 완전한 데이터들이 저장되어 있는 상태라고 생각하시면 되겠습니다. 여기서 제약조건은 이러한 데이터 무결성을 보장함으로써 .. 더보기
[SQL] 추가된 데이터 타입, TIMESTAMP! TIMESTAMP는 오라클 9I 부터 추가된 확장형 데이터 타입으로 밀리초까지를 지원함으로써 DATE 타입보다는 정밀하게 시간을 나타냅니다. 초를 최대 9자리 지정해서 나타냄이 가능한데 보다 정밀하게 시간 정보를 알 수 있습니다. 디폴트(Default) 값은 6자리로 지정됩니다. 우선 TIMESTAMP는 3가지 종류로 나누어 볼 수 있는데요, 다음을 참조하시길 바랍니다. 1. TIMESTAMP(자리수) - '자리수'에 밀리초의 자리수를 지정해줍니다.(디폴트 6자리) 2. TIMESTAMP(자리수) WITH TIME ZONE - '자리수'에 밀리초의 자리수를 지정해줍니다.(디폴트 6자리) - TIMESTAMP + GMT 즉, 그리니치 표준시와의 차이를 함께 나타냅니다. 3. TIMESTAMP(자리수) WI.. 더보기
[SQL] 기본 데이터 타입(숫자, 문자, 날짜) CREATE를 이용한 테이블 생성시에 표기해주는 것이 데이터 타입인데요. 이번 글에서는 추가된 DATE타입을 제외한 기본 데이터 타입에 대해서 알아볼까해요. 우선 다루게 될 내용은 숫자, 문자, 날짜 데이터 타입 3가지입니다. 사실 각 타입에 더 많은 종류가 있으나 많이 쓰이는 것만 다루겠습니다. 1. 숫자 데이터 타입 · NUMBER(①, ②) - 가변 숫자 타입 - ① 전체 자리수 ② 소수점 이하 자리수 ※ 정수부의 자리수 = (전체자리수 - 소수점 이하 자리수) 먼저, 숫자 데이터 타입입니다. 만일에 숫자데이터 타입을 NUMBER(7,4) 로 지정한다면 , 소수자리수를 포함한 전체자리수가 7자리이고 그중에서 소수자리수는 4자리가 됩니다. 그러면 나머지 정수부분은 3자리가 되는군요. 자료 입력을 해보.. 더보기
[오라클] 아카이브 로그(Archive Log) 데이터베이스 복구를 위한 방법 중 하나인 아카이브 로그 입니다. 리두 로그 파일과 더불어 중요한 복구 방법인데요. 리두 로그 파일을 따로 저장하느냐 안하느냐에 따라 노아카이브 로그 모드와 아카이브 로그 모드로 불리웁니다. 이중 아카이브 로그 모드가 리두 로그 파일을 별도로 저장하는 모드인데요. 즉, 리두로그 파일의 복사본을 만듭니다. 이때 설정된 경로에 따라 리두로그 파일을 복사하는 것을 Archiver 즉, ARCH 백그라운드 프로세스라 부릅니다. 노아카이브 로그 모드와 아카이브 모드의 차이점은 무엇일까요? 우선 아카이브 로그의 유무가 되겠구요. 그로인한 디스크의 I/O의 증가, 감소와 관련이 있겠습니다. (당연히 아카이브 로그를 디스크에 쓸려면 I/O가 발생하겠죠?) 그리고 노아카이브 로드 모드는 데.. 더보기
[SQL] SET 연산자에 대해서 알아보자, INTERSECT, MINUS! 이글 보시기 전에 SET연산자에 관한 글 먼저 보시길 바랍니다. (밑의 링크를 누르시면 해당 페이지로 이동합니다.) SET연산자에 대해서 알아야할 사전지식 우선 INTERSECT 교집합 입니다. 이전 UNION에 관한 글을 보셨다면 UNION ALL에 썼던 테이블을 그대로 쓸테니 참고 바랍니다. INTERSECT는 두 테이블의 공통 요소만을 뽑아옵니다. 일단 다음 테이블은 한 학원의 두명의 강사의 강의를 듣는 학생들에 대한 테이블입니다. 1. 강사 1 2. 강사 2 여기서 조회하고 싶은건 어느 학생이 두 강사에게 모두 강의를 듣나~ 인데요. INTERSECT를 통해서라면 간단합니다. SELECT * FROM tutor1 INTERSECT SELECT * FROM tutor2; 이와같이 두명의 학생들이 조.. 더보기
[SQL] SET 연산자에 대해서 알아보자, UNION(ALL)! 이글 보시기 전에 SET연산자에 관한 글 먼저 보시길 바랍니다. (밑의 링크를 누르시면 해당 페이지로 이동합니다.) SET연산자에 대해서 알아야할 사전지식 이미 윗글에서 UNION이 무엇인지는 설명을 했기 때문에 쿼리를 실행시키면서 결과를 볼텐데요. 자~ 우선 UNION이 쿼리문에서는 어떻게 쓰이는지 모양새를 봅시다. SELECT 컬럼 1, 컬럼 2 FROM 테이블 UNION(OR UNION ALL) SELECT 컬럼 3, 컬럼 4 FROM 테이블 이렇게 쓸때 주의할 점이 있습니다. 두개의 쿼리의 조회 결과가 합쳐지는 것인데요, 합쳐질때 컬럼의 갯수 및 타입이 다르면 오류가 납니다. 우선 컬럼의 갯수는 SET연산자인 UNION으로 묶어지는 두 쿼리의 컬럼 갯수가 동일해야 합니다. 그렇지 않으면 오류가 나.. 더보기
[SQL] SET 연산자에 대해서 알아보자, 우선 배경지식! SET 연산자에 대해서 우리는 초중고 때 배웠던 집합의 개념을 다시 떠올려 볼 수 있습니다. 사실 초등학교때 배웠는지는 기억이 안나는데요. ^^; 집합의 개념만 잡고 있다면 SET연산자에 대해서 이해가 더 잘 될 겁니다. SET 연산자에서 다룰 내용은요 UNION, UNION ALL, INTERSECT, MINUS 입니다. UNION 들은 합집합에 해당되는 내용이겠구요. INTERSECT는 교집합, 그리고 MINUS는 차집합이 되겟습니다. 우선 혹시나 합집합에 대해서 모르시는 분들을 위해서 잠시 수학의 시간으로 돌아가볼게요 ^^ 합집합은 두개의 집합의 합, 표현식으로는 A∪B 으로 나타낼 수 있겠는데요. 두개의 집합이 합쳐질때 공통요소는 한번만 포함이 됩니다. 즉 예로, A 집합에는 1~5까지의 수가 존.. 더보기