본문 바로가기

Domain

(72)
[데이터베이스] 10. DBMS의 버퍼 관리와 쿼리 비용 추정 DBMS의 버퍼 관리 질의 과정에서 데이터에 접근하기 위해서는 테이블의 레코드들이 실제 물리 메모리의 버퍼 공간에 할당되어야 한다. 물리 메모리는 디스크에 비해 매우 적은 공간이며 이에 따라 적절한 교체 정책이 필요하다. DBMS는 로 이를 관리한다. 이는 메모리 버퍼의 몇 번 프레임에 디스크의 몇 번 페이지를 올렸는지를 의미한다. 특정 페이지가 요청된 경우의 시나리오는 다음과 같다. IF) 해당 페이지가 버퍼에 존재할 경우 -> 바로 반환 ELSE) 해당 페이지가 버퍼에 존재하지 않는 경우 버퍼에서 교체할 프레임을 선택한다. 교체할 프레임이 dirty면 이를 디스크에 기록한다. 요청한 페이지를 디스크에서 버퍼의 해당 프레임으로 로드한다. 각 프레임은 pin count로 얼마나 사용되고 있는 지를 기록하..
[데이터베이스] 9. 인덱스와 인덱스 구조별 비용 추정 인덱스 인덱스란 검색키를 기반으로 효율적인 질의를 돕는 메커니즘이다. 한 테이블의 특정 필드를 인덱스로 설정할 경우 전체 테이블을 full scan하는 것이 아닌 인덱스의 검색키 만으로 스캔하여 빠르다. 다만, 인덱스를 사용할 경우 공간적인 오버헤드가 약간 증가한다. 그리고, 갱신 작업 또한 약간의 시간적 오버헤드가 발생한다. 기존의 경우 해당 테이블의 실제 데이터만 수정하면 되지만, 인덱스가 있을 경우 인덱스의 검색키 또한 바꿔야 하며 그에 따라 인덱스의 구조가 변경될 수 있기 때문이다. 파일 구조에 따른 인덱스의 종류 B 트리 인덱스 B 트리의 구조를 띄는 인덱스로 하나의 노드에 2개 이상의 엔트리가 존재한다. 해당 구조의 특징은 아래와 같다. 범위 탐색에 유리하다. 성능은 트리의 높이에 따라 결정된..
[데이터베이스] 8. ESQL(Embedded SQL)와 프로시저(Procedure) ESQL 응용프로그램에 삽입된 SQL문을 의미한다. 응용프로그램에서 작성된 SQL문을 통해 DBMS에 접근하여 조회/갱신 등이 가능하다. 이때, 결과를 받기 위해 '커서'를 활용한다. 커서는 SQL문의 결과를 접근하기 위한 포인터이다. void computeGPA{ EXEC SQL BEGIN DECLARE SECTION; float oldgpa, newgpa; char id[9]; EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE SECTION; EXEC SQL DECLARE gpaCursor CURSOR FOR SELECT id, gpa FROM student FOR UPDATE; EXEC SQL OPEN gpaCursor; //학생 테이블 접근시작 while(1){ ..
[데이터베이스] 7. SQL의 View View View란 테이블에 대한 가상의 테이블로써 테이블처럼 직접 데이터를 소유하지 않고 검색 시에 이용할 수 있도록 정보를 담고 있는 객체를 의미합니다. 만약 특정 컬럼들을 여러 번 조회해야 한다면 똑같은 SELECT문을 여러 번 반복해야 하는데, 뷰에 해당 쿼리문을 저장함으로써 빠르고 간편하게 조회가 가능합니다. 자주 질의되는 SQL문을 View라는 가상 테이블로 저장. View의 특징 데이터의 논리적 독립성 예를 들어, 기존의 instructor 테이블이 professor(pid, name, dept), lecturer(lid, name, major, address)로 분할되었다. 이때 View의 instructor 컬럼 리스트의 이름과 타입은 기존의 insturctor 테이블과 동일하므로 기존의..
[데이터베이스] 6. 무결성 제약 조건 무결성 제약 조건 데이터베이스 스키마에 대하여 지정되는 조건으로 데이터 베이스에 저장되는 데이터들이 반드시 만족해야할 조건을 의미한다. 부적절한 정보 입력을 방지하기 위함. RDBMS의 무결성 제약 조건1 - 도메인 무결성 제약 조건 CHECK, DEFAULT, NOT NULL 등을 활용하여 각 속성의 도메인을 지정하여 입력 오류를 방지 grade_type이라는 학생의 가능한 학점에 대한 도메인 생성 CREATE DOMAIN grade_type AS CHAR CHECK (VALUE IN('A','B','C','D','F')); CREATE TABLE course_taken( ... student_id CHAR(4) NOT NULL, #NULL 값을 방지 grade grade_type, # 지정한 학점만 ..
[데이터베이스] 5. 데이터의 입력, 삭제, 수정 데이터 입력 : INSERT INSERT INTO 테이블(컬럼명1, 컬럼명2, ...) VALUES (값1, 값2, ...),(값1, 값2, ...); INSERT 방식 원소를 직접 입력 질의에 의한 입력: 질의 결과. 즉, 다수의 원소들이 동시에 입력 원소의 직접 입력 INSERT INTO student(id, name) VALUES ('970601','임꺽정'), ('980402','홍길동'); 질의에 의한 입력: 학생 중 성적이 3.5 이상인 경우 장학생 목록에 추가 INSERT INTO scholarshipStudent(id,major,gpa) SELECT S.id, S.major. S.gpa FROM student S WHERE gpa>=3.5; 데이터 삭제 : DELETE DELETE FROM..
[데이터베이스] 4. MySQL 중첩질의문 중첩 질의문 SELECT문의 FROM, WHRER 절에 부속 질의문이 있는 경우를 중첩 질의문이라 한다. 예를들어 평균학점 이상을 받은 학생들의 이름을 구하는 질의는 아래와 같다. SELECT S.name FROM student S WHERE S.gpa > (SELECT avg(S2.gpa) FROM student S2); 집합 비교 연산자(IN, NOT IN, ALL, ANY) 원소 IN 집합: 집합에 원소가 있을 경우 참이다. 원소 NOT IN 집합: 집합에 원소가 없을 경우 참이다. 원소* < ALL 집합: 집합의 모든 원소가 원소*보다 클 경우 참이다. 원소* < ANY 집합: 집합의 원소 중에 원소*보다 큰게 하나라도 있을 경우 참이다. 하나 이상의 통계 과목을 수강한학생의 이름을 구하라. SE..
[데이터베이스] 3. MySQL - 조회 SELECT * FROM course_taken WHERE sid=3.0; #산술비교 SELECT * FROM students WHERE name='이동주'; #문자열비교 SELECT * FROM students WHERE birthdate>='01/01/1985'; #날짜비교 SELECT * FROM students WHERE (gpa>=3.5 AND major='cs') OR (gpa='1997-06-01' ORDER BY name ASC; - GROUP BY 연산 조회된 결과 데이터를 그룹화하기 위해 사용하는 연산. #95학번 이전 학생에 대하여, 전공별 학생 수 SELECT major 전공 ,COUNT(*) 사원수 FROM students WHERE sid