인덱스 칼럼 순서에 따른 탐색 시간 비교해보기

 

0. 테이블생성

 

1. 정렬하기

1) ORDER BY EmployeeID, OrderDate;

EmployeeID로 정렬된 뒤에 OrderDate 순으로 정렬되어있다.

2) ORDER BY OrderDate, EmployeeID;

OrderDate , EmployeeID 순으로 정렬되어 있는 것을 알 수 있다.

 

2. 특정 조건으로 찾기

SELECT *
FROM TestOrders WITH(INDEX(idx_emp_ord))
WHERE EmployeeID = 1 AND OrderDate = CONVERT(DATETIME, '19970101');

SELECT *
FROM TestOrders WITH(INDEX(idx_ord_emp))
WHERE EmployeeID = 1 AND OrderDate = CONVERT(DATETIME, '19970101');

인덱스 조건이 다른 두 개 코드는 탐색 결과가 차이가 없는 걸 알 수 있다.

3. 범위 조건으로 찾기

범위가 늘어나면 점점 큰 차이가 나게 된다. idx_emp_ord로 정렬한 뒤에 OrderDate범위는 바로 접근할 수 있는 반면에 idx_ord_emp로 정렬된 두 번째는 OrderDate를 범위를 찾은 다음에 다시 EmployeeID를 찾아야 하기에 더 오랜 시간이 걸리게 된다.

 

=> Index(a,b,c)로 구성되었을때, 선행 between사용하면 후행은 인덱스 기능을 살싱하게 된다.

반응형

'STUDY > 데이터베이스' 카테고리의 다른 글

[SQL] 연습 Clustered / NonClustered  (0) 2022.07.16
[SQL] 연습 복합인덱스 #4  (0) 2022.07.12
[SQL] 연습 DATABASE 작성 #3  (0) 2022.06.30
[SQL] 연습 ORDERBY #2  (2) 2022.05.17
[SQL] 연습 SELECT,WHERE #1  (0) 2022.05.10

1. NonClustered 인덱스 추가

특징 : Clustered Index가 없으면 데이터는 Heap Table이라는 곳에서 저장하고 Heap RID를 통해 Heap Table에 접근해서 데이터를 추출한다.

2. Clustered 인덱스 추가

HEAP RID가 없어졌으며 UNIQUEFIRE(같은 OrderID를 식별도록)가 생성됐다.

특징: HeapTable이 없으며, Leaf Table에 실제 데이터가 있고, Clustered Index의 실제 키값을 가지고 있다.

반응형

'STUDY > 데이터베이스' 카테고리의 다른 글

[SQL] 인덱스 컬럼 순서  (0) 2022.07.20
[SQL] 연습 복합인덱스 #4  (0) 2022.07.12
[SQL] 연습 DATABASE 작성 #3  (0) 2022.06.30
[SQL] 연습 ORDERBY #2  (2) 2022.05.17
[SQL] 연습 SELECT,WHERE #1  (0) 2022.05.10

테이블 복사하기

 

복합 인덱스 추가하기

 

추가된 인덱스 정보 보기

인덱스 적용 1

인덱스 적용2

인덱스 적용3

 

인덱스 적용4

 

결과가 1~3번까지와(Index Seek) 4번이 다른 이유는 인덱스 OrderId, ProductId 생성한 순서에 영향이있다.

위그림처럼 첫번째로 만들어준 OrderId로 탐색하고 그 뒤에 ProductID로 탐색하게된다. (정렬된 OrderID와 다른 ProductID)

 

=> 결과 : 인덱스(a,b)사용중이라면 인덱스(a)는 없어도 되지만 (b)로도 검색이 필요한 경우는 (b)도 별도로 인덱스에 추가해 줘야한다.

 

 

+) 인덱스를 가공해서 찾을 경우 인덱스덕을 못볼수 있음

가공해서 찾기
그냥 찾기

 

반응형

'STUDY > 데이터베이스' 카테고리의 다른 글

[SQL] 인덱스 컬럼 순서  (0) 2022.07.20
[SQL] 연습 Clustered / NonClustered  (0) 2022.07.16
[SQL] 연습 DATABASE 작성 #3  (0) 2022.06.30
[SQL] 연습 ORDERBY #2  (2) 2022.05.17
[SQL] 연습 SELECT,WHERE #1  (0) 2022.05.10

1. 데이터베이스 만들기

- UI를 통해서 만들기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- SQL구문으로만 생성

실행 후 -> refresh를 눌러준다.

 

2. 데이터베이스 만들기

Desin을 보면 생성된 테이블을 볼 수 있다.

3. 삭제 하기

해당 구문을 실행하면 테이블이 삭제된다. (경고없이 바로 삭제되니 주의)

 

4. 테이블 내용 추가하기

5. 테이블 내용 삭제하기

 

6. 테이블 내용 변경하기

7. 제약 PRIMARY KEY

 

- 테이블 생성할때 지정하기

- 구문으로 지정하기

=> 결과

결과

제약 사항이 없을때 

 

제약 사항이 있을때

PRIMARY KEY가 있는 경우는 c#딕셔너리(자세하게는 다름 이진트리, 해쉬)를 사용하는것과 비슷하고 PRIMARY KEY가 없는 경우는 List에서 찾는것과 비슷하다.

반응형

'STUDY > 데이터베이스' 카테고리의 다른 글

[SQL] 인덱스 컬럼 순서  (0) 2022.07.20
[SQL] 연습 Clustered / NonClustered  (0) 2022.07.16
[SQL] 연습 복합인덱스 #4  (0) 2022.07.12
[SQL] 연습 ORDERBY #2  (2) 2022.05.17
[SQL] 연습 SELECT,WHERE #1  (0) 2022.05.10

정렬하기

SELECT *
FROM players
WHERE birthYear IS NOT NULL
ORDER BY birthYear DESC, birthMonth DESC, birthDay DESC;

birthYear가 NULL값을 제외하고 내림차순으로 정렬한다. birthYear값이 같다면 birthMonth ,birthDay 까지 비교하여 내림차순 정렬처리한다.

 

SELECT TOP PERCENT*

데이터중 5퍼센트만 뽑아내기

 

SELECT TOP 100*

TOP 100개 뽑아내기

 

OFFSET 100 ROWS FETCH NEXT 100 ROWS ONLY;

100개행을 건너뛰고 그 다음 100개 행을 출력하기

반응형

'STUDY > 데이터베이스' 카테고리의 다른 글

[SQL] 인덱스 컬럼 순서  (0) 2022.07.20
[SQL] 연습 Clustered / NonClustered  (0) 2022.07.16
[SQL] 연습 복합인덱스 #4  (0) 2022.07.12
[SQL] 연습 DATABASE 작성 #3  (0) 2022.06.30
[SQL] 연습 SELECT,WHERE #1  (0) 2022.05.10

1.

SELECT  nameFirst, nameLast, birthYear

FROM players
WHERE birthYear = 1866

players파일에서 nameFirst, nameLast, birthYear중 birthYear가 1866인 데이터들만 추려내도록 하였다.

더보기
블록을 지정해서 실행하면 WHERE 문을 실행시키지 않음

 

2. WHERE 조건 조합하여 체크하기

 

3. 패턴 이용하기

- 'New Yor' 이후 한 글자 까지 찾기

- 'New York%'  New Yor으로 시작하는 모든 데이터 찾기

반응형

'STUDY > 데이터베이스' 카테고리의 다른 글

[SQL] 인덱스 컬럼 순서  (0) 2022.07.20
[SQL] 연습 Clustered / NonClustered  (0) 2022.07.16
[SQL] 연습 복합인덱스 #4  (0) 2022.07.12
[SQL] 연습 DATABASE 작성 #3  (0) 2022.06.30
[SQL] 연습 ORDERBY #2  (2) 2022.05.17

+ Recent posts