내장형 데이터 형식과 객체

 

 

 

 

ØC#의 모든 것은 객체다. 내장형 데이터 형식 역시 객체이다. 이들은 모두 System.Object로부터 상속받은

  객체이다. 따라서 메소드와 속성을 가진다.

Ø모든 객체는 아래와 같은 메소드를 가진다.

 

 

 

 

 메소드명

 설명

  bool Equals()

  같은 객체인지 비교

  int GetHashCode()

  해쉬값을 얻음

  Type GetType()

  형식 정보 얻음

  string ToString()

  객체를 대표하는 문자열 반환

 

 

 

 

 

 

Boolean

 

 

 

Øboolean (bool)
lboolean type이 가질 수 있는 값은 truefalse뿐이다.
§) bool b = true
ltrue1과는 다르며, 마찬가지로 false0과는 다르다. (C에서는 TRUE, FALSE#define을 통해 정의하여 사용했었다. 정수를 암묵적으로 boolean 형으로 사용한 것이다.)
ltruefalse로 산술 연산을 할 수 없다
l오로지 논리 연산자를 가진 수식에 대해서만 사용할 수 있다

 

 

 

 

 

C#의 특수 문자 (일부)

 

 

 

 

 유형

 유니코드

 유니코드

 \’

 0x0027

단일 인용부호

 \”

0x0022

 이중 인용부호

\\

0x005C

백슬래시

\0

0x0000

\b

0x0008

백스페이스

\n

0x000A

라인

\r

0x000D

첫칸으로

 \t

0x0009

\uxxxx

 

16진 유니코드 문자

 

 

 

 

 

 

최적의 성능을 위한 SQL작성시 고려사항

 

*집합적 사고

*인덱스(Index(집합적 사고 및 인덱스 정책에 대한 부분))

*조인방식(Join Method)

*조인순서(Join Order)

*조인 연결고리(Join Link)

*인라인 뷰(Inline View)

*서브쿼리(Subquery)

*실행계획(Execution Plan)

*저장형 함수(Stored Procedure)

*스칼라 서브쿼리(Scalar Subquery)

 

고려사항6. 실행계획 확인

 

*실행계획을 확인해야 하는 이유

-SQL 작성시 자신이 예상하였던 실행계획과 옵티마이저가 생성한 실행계획과의 비교

-옵티마이저가 작성자가 생각했던 최적의 처리경로와 같이 실행계획을 수립했는지에 대한 판단이 필요

-옵티마이저의 한계로 인해 사용자가 생각하는 논리적인 판단과의 차이 확인

 

최적의 SQL로 보아도 무방함

사용자가 생각했던 최적의 처리 경로 = 옵티마이저가 생각한 최적의 처리 경로

 

사용자의 논리적 판단과 옵티마이저의 논리적 판단을 비교할 필요가 있음

사용자가 생각했던 최적의 처리 경로 ≠ 옵티마이저가 생각한 최적의 처리 경로

 

고려사항5. Subquery

 

*Subquery의 정의

-메인쿼리에 종속되는 하위의 쿼리를 의미함

-종속의 의미는 반드시 메인쿼리의 집합 레벨을 변경할 수 없음

-메인쿼리는 서브쿼리의 모든 속성을 사용할 수 없음

-서브쿼리는 메인쿼리의 모든 속성을 사용할 수 없음

-대표적인 연산자로는 IN, EXISTS가 있음

 

*제공자형 서브쿼리

-메인쿼리의 처리범위를 줄여줄 수 있을 때 사용 고려

-메인쿼리에 상수값을 공급한는 것과 동일한 효과를 얻을 수 있음

-서브쿼리로부터 상수값을 공급받는 Where절의 조건에 인덱스가 필요함

 

*확인자형 서브쿼리

-메인쿼리에서 산출된 결과가 다른 테이블의 조건을 만족하는지 여부를 확인하고자 할때 사용

-만족하는 결과만 존재하면 처리를 더 이상 만족하는 로우를 찾지 않음으로 처리가 빠름

 

 

 

 

고려사항4. inline View

 

*Inline View의 정의

-인라인 뷰란 FROM 절 상에 오는 서브쿼리로서 VIEW처럼 동작을 함

-적절한 크기의 중간집합을 생성하기 위하여 사용됨

-데이터 처리의 순서를 의도적으로 지정하기 위해 사용됨

-정상적이지 않은 데이터 구조를 연결하기 위해 사용됨

-실행계획의 제어를 위한 목적으로 사용됨

 

*Inline View vs View vs Subquery Factoring

 

 

고려사항3. JOIN LINK

 

*연결고리(Join Link)란 무엇인가?

-Where절에서 조인에 참여하는 각 테이블의 컬럼 간 다양한 연산자(=,<>,=, in...)로 연결되어 있는 부분을 연결고리라고 함

 

*연결고리 종류

-연결고리는 오로지'='만 존재하는 것이 아님

 

 

*연결고리 상태

-양쪽 정상

 。조인 오더에 상관없이 항상 인덱스를 사용

 。양쪽 연결고리가 정상일 경우 처리범위가 적은 테이블부터 드라이빙 되는 것이 유리

 

-한쪽 정상

 。논리적으로 연결고리가 비정상인 테이블(연결고리에 인덱스가 사용할 수 없는 테이블)에서 연결고리가 정상적인 테이블로의 조인오더는 양쪽 정상과 같이 문제가 되지 않음

 。단, 반대의 경우로 수행이 될 경우 성능상의 문제를 야기할 수 있음

 

-양쪽 이상

 。대부분 Nested Loops 조인 형태 보다는 Hash Join으로 풀리게 된느 경우가 대부분임

+ Recent posts