본문 바로가기

DataBase

MSSQL 문법 -인덱스/스키마 바운드 함수/Rollback

반응형

인덱스의 개념

인덱스의 장단점 

장점 

검색은 속도가 무척 빨라질 수 있다. (물론 바드시 그런 것은 아니다.)

그 결과 시스템의 부하가 줄어들어서 결국 시스템 전체의 성능이 향상된다.

 

단점

인덱스가 데이터베이스 공간을 차지해서 추가적인 공간이 필요해 진다 (대략 데이터 베이스의 10%내외의 공간이 추가로 필요하다)

인덱스를 생성하는데 많은 시간이 소요될 수있다.

데이터 변경 작업이 자주 일어날 경우에는 성능이 많이 나빠질 수 있다.

 

클러스터형 인덱스 ->영어사전과 비슷한 개념

비클러스터형 인덱스 -> 일반 책의 '찾아보기'와 비슷한개념

 

특징 

클러스터형 인덱스는 테이블당 1개만 생성

비클러스터형 인덱스는 테이블당 여러개 생성

클러스터형 인덱스는 행 데이터를 인덱스를 지정한 열에 멎춰서 자동 정렬한다

제약조건 없이 테이블 생성시에 인덱스를 만들 수 없다.

인덱스가 자동생성되기 위한 열의 제약 조건은 primary key

와  Unique 뿐이다.

 

 

 

 

 

 

 

인덱스의 내부 작동 >> CL,NCL 인덱스 구조

클러스터형 인덱스 구성후 -> 내부적 정렬이 일어남

 

클러스터형 인덱스의 특징

틀러스터형 인덱스의 생성시에는 데이터페이지 전체를 다시 정렬하게 된다,

그러므로 크러스터형 인덱스를 생성은 심각한 시스템 부하를 줄 수 있따.

클러스터형 인덱스는 인덱스 자체의 리프 페이지가  데이터이다.

비 클러스터형 보다 검색속도는 더 빠르다 하지만 데이터의 입력/ 수정 /삭제는 더 느리다.

 

비클러스터형 인덱스의 특징 

검색속도는 더 느리지만 데이터 변경은 더빠르다.

비클러스터형 인덱스는 여러개 생성할 수 있다.

하지만 남용하는 경우는 더 느려질 수 있다. 

 

결론 인덱스를 생성해야 하는 경우와 그렇지 않은 경우

인덱스는 열단위에 생성된다,

WHERE절에서 사용되는 컬럼을 인덱스로 만든다.

WHEERE절에 사용 되더라도 자주 사용해야 가치가 있다.

데이터의 중복도가 높은 열은 인덱스를 만들어도 별 효용이 없다,

외래키가 사용되는 열에는 인덱스를 되도록 생성해 주는 것이 좋다.

JOIN에 자주 사용되는 열에는 인덱스를 생성해 주는 것이 좋다,

INSERT/UPDATE/DELETE 가 얼마나 자주 일어나는 지를 고려한다. 

클러스터형 인덱스느 하나만 생성할 수 있다.

클럿터형인덱스가 테이블에 아예없는 것이 좋은 경우도 있다.

사용하지 않는 인덱스는 제거하자

계산열에도 인덱스를 활용할 수 있따.

 

 

트랜잭션 

 

데이터베이스는 물리적 파일임

기본적으로 mdf ,idf두 파일이 생김

이파일에는 데이터베이스 개체 와 그 행 데이터가 저장됨

트랜잭션 로그파일

idf 로 생성됨

정전 등의 응급상황에서 입력된 데이터가 완전하도록함

전부 되거나 전부 안되거나 를 지원함

 

트랜잭션 개념 

하나의 논리적 작업단위로 수행되는 일련의 작업

sql문 의 묶음

한단위의 트랜잭션은 모두 처리되거나 모두 처리되지 않도록 DBMS가 관리해준다,

 

BEGIN TRANSACTION (또는  BEGIN TRAN)

SQL문장들

COMMIT TRANACTION 

 

 

 

COMMIT ROLLBACK을 실행할려면 무조건  BEGIN TRAN 을 하고 해야한다.

 

 

잘 못 변경한 경우 ROLLBACK 을 통해 다시 기존 값으로 변경가능하다. 

COMMIT 하면 모든 값들이 고정되고 끝난다.

 

 

트렌젝션은 어떤 작업을 하더라도 항상 적어 놓고 하는 것을 추천한다. 그래야 잘할 수 있따. 

문제가 발생하더라도 수정 및 복구가 가능하다.

 

 

 

데이터베이스 모델링

 

프로젝트의 진행 단계 

개념

 프로젝트란 현실세계의 업무를 컴퓨터 시스템으로 옮겨 놓은 일련의 과정 또는 대규모의 프로그램 작성하기 위한 전체 과정

소프트웨어 분야의 몇몇 개발자에 의존하는 고질적인 문제 때문에 소프트웨어 개발 방법론이 대두됨 이러한 분야를 소프트웨어 공학이라고 부름

 

폭포수 모델

각 단계가 명확하게 구분되는 장점

문제점 발생시 앞단계로 돌아가기는 어려움

 

정보 공학적 방법론

 

 

객체 지향 방법론

데이터 중심으로 개발하는 방법

모든 단계를 유기적으로 협력시키는 방법

 

CBD 분석 방법론 (Component Based Develpment)

 

 

애자일 방법론

자기 적응적 방식 

일정한 주기를 가지고 프로토 타입을 만들어 내기 때문에 고객의 반응을 반영하기 쉽다.

 

데어터 베이스 모뎅링

 

 

빈화면에서 새테이블 생성

화면에서 userID 클릭하고 드래그하면 됨!

 

 

부모창의 내용을 삭제하면 자식창의 내용 까지 같이 삭제되도록하는 설정이다.

위험한 설정이다.

업데이트 규칙을 설정하는 것은 자주한다.

 

 

 

 

새로만든 한아이티 아이디로 들어갔는데 sqlDB는 접속이되는데  아무것도 할 수 가 없는 경우 

 

 

위의 설정으로 변경 후 다시 HANIT로 접속하면 다른 데이터 베이스에서 정보를 불러 올 수 있다.

 

시험!

 

UPDATE 

JOIN

SORT

 

 

저장 프로지서 

저장 프로시저 란 SQL server에서 제공되는 프로그래밍 기능

저장 프로시저는 한마디로 쿼리문의 집합으로 어떤 동작을 일괄 처리하기 위한 용도로 사용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CREATE OR ALTER PROC usp_ages
@userName NVARCHAR(10)
AS

BEGIN
	DECLARE @mYear INT;
	SELECT @mYear = birthYear FROM userTBL
	WHERE name =@userName;

	IF (@mYear >= 1980)
	BEGIN
	SELECT '아직 젊군요';
	END
	ELSE
	BEGIN
	SELECT '다 됐습니다.';
	END
	END
	GO

CREATE PROCEDURE usp_Case
	@userName NVARCHAR(10)
AS
BEGIN
	DECLARE @Year INT;
	DECLARE @Zodiax NVARCHAR(3)

	SELECT @Year = birthYear FROM userTBL
	WHERE name = @userName;

	SET @Zodiax = 
	CASE
	WHEN (@Year%12 = 0)THEN '원숭이'
	WHEN (@Year%12 = 1)THEN '닭'
	WHEN (@Year%12 = 2)THEN '개'
	WHEN (@Year%12 = 3)THEN '돼지'
	WHEN (@Year%12 = 4)THEN '쥐'
	WHEN (@Year%12 = 5)THEN '소'
	WHEN (@Year%12 = 6)THEN '호랑이'
	WHEN (@Year%12 = 7)THEN '토끼'
	WHEN (@Year%12 = 8)THEN '용'
	WHEN (@Year%12 = 9)THEN '뱀'
	WHEN (@Year%12 = 10)THEN '말'
	WHEN (@Year%12 = 11)THEN '양'


	END;
	PRINT @userName +'는' + @Zodiax +'띠'
END
GO

저장프로시저 

SQL SERVER의 성능을 향상 시킬 수 있다. 

모듈식 프로그래밍이 가능하다

보안을 강화할 수 있다.

네트워크 전송량의 감소시킨다.

 

사용자정의 함수 

개념

저장프러시저와 조금 비슷해 보이지만 일반적인 프로그래밍 언어에서 사용되는 함수와 같이 복잡한 프로그래밍이 가능

함수는  RETURN문에 의해서 특정 값을 되돌려 줌

저장 프로시저는 EXEC에 의해서 실행되지만 함수는 주로 SELECT 문에 포함되어 실행됨(예외도 있음)

 

 

 

 

 

 

사용자 정의 함수 >> 함수의 종류

 

사용자 정의 테이블 반환 함수 

*리턴하는 값이 테이블인 함수

(1) 인라인 테이블 반환 함수 : 간단히 테이블을 돌려주는 함수로 뷰와 비슷한 역할 

 

스키마 바운드 함수

함수에서 참조하는 테이블 뷰 등이 수정되지 못하도록 설정한 함수

스키마 바운드 함수의 생성은 옵션에 WITH SCHEMABINDING을 사용 

테이블 변수

일반적인 변수의 선언 처럼 테이블 변수도 선언해서 사용

이블 변수의 용도는 주로 임시테이블의 용도와 비슷하게 사용

사용자 정의 함수의 제약사항

사용자 정의 함수 내부에 TRY CATCH 문을 사용할 수 없다

사용자 정의 함수 내부에 CREATE /ALTER/DROP문을 사용못함

오류가 발생하면 즉시 함수의 실행이 멈추고 값을 반환하지 않는다.

반응형