본문 바로가기

Database/이론

sql 통계, index

- 같은 결과가 나오는 프로그램을 5가지에서 10가지 사이로 만들어본다.
이 중에서 최적을 찾는다!!!!!!!!

 

 

- 인덱스의 채우기 비율이란.............?

docs.microsoft.com/ko-kr/sql/relational-databases/indexes/specify-fill-factor-for-an-index?view=sql-server-ver15

 

인덱스의 채우기 비율 지정 - SQL Server

인덱스의 채우기 비율 지정

docs.microsoft.com

 

 

 

 

-- * 통계
요즘엔 비동기로 업데이트 한다.

병렬프로그래밍 - cpu를 효율적으로 사용하도록 자동 설계됨.


- 힙구조
개체는 힙에 저장이 되며, 한칸한칸 저장되다가 중간에 데이터를 삭제하면 빵꾸가 난 상태로
있는다. 따라서 주소값을 지정하여 검색하면 더 빠름

- 스택 
힙구조에서 몇호에 어떤데이터가 있는지 정확히 알고있다.

- 조각모음
힙구조에서 중간중간 삭제된 데이터들로인해 빈 공간이 생겼을 때, 디스크 조각모음으로
빈 공간을 없애고 앞으로 한칸(빈공간만큼)씩 땡겨준다. 그리고 통계에 알려준다.

- 통계는 힙 구조내의 데이터들의 위치를 알고있고 때문에
인덱스 리빌드가 가능하다.(자주는안함)-> 통계는 업데이트를 해야 정확하고 빠름.

- 컨넥, 클로즈, 디스포즈.//////........?

- 인덱스 구조는 비트리 구조이다
- 인덱스는 스캔보다 시크가 빠르다!!!!!
- DELETE : 자주 DELETE가 일어나면 CLUSTER INDEX에 변형이 생기면 다시 생성해야 할 수 있다
- INSERT : 자주 입력, 삭제가 반복되면 조각이 날 수 있어 재작성이 필요하다
- UPDATE : 채우기 등을 덜해도 된다.
- SELECT후 INSERT를 할 경우 멀티컬럼으로 정렬해서 넣기!
- 튜닝할 때에는 쿼리플랜이나 쿼리저장소를보고 튜닝어드바이저를 쓴다
- DMV명령어들을보고 실행한다규


-- * 웨어하우스
데이터 
인덱스는 대량의 데이터를 빨리 가져오기 위해 씀 -> 주로 전용쿼리(컬럼기반)를 만들어서 씀.

 

 

 

 

 

-- * 인덱스 선택의 유의사항


1. 인덱스를 생성/수정하지 않는다 = 신중하게 선택
2. INCLUDE 사용해서 중복사용을 하지 않도록 한다.
3. 인덱스를 사용 할 때 키의 크기를 너무 크게하지 않는다.(10개에서 15개가 적당)
CHAR / VARCHAR = 10~15개 자릿수 미만, 최대 20지릿수만 사용 권장 
4. 데이터베이스 엔진의 특성에 맞게 인덱스를 선택
OLTP = Row Index
OLAP = Column Index를 사용
WHERE 또는 Group 구문등에서 사용에 맞게 설계 사용하는것을 권장한다.
5. 인덱스를 생성 할 때에는 컬럼 순서와 정렬도 중요하다.
6. Join에서 사용되는것도 최대한 인덱스를 사용하도록 원장
7. 인덱스를 주기적으로 수집 계획을 세운다(인덱스의 채우기비율)

 



-- SQL서버 엔진의 처리순서
FROM-> ON-> JOIN-> WHERE-> GROUP BY-> WITH-> HAVING-> SELECT-> DISTINCT-> ORDER BY-> TOP(*)

 

 

 


위와같이하면 실행순서를 예측 할 수 있다.

-- 옵티마이저의 사용
대부분 옵티마이저는 비용기반 옵티마이저기때문에 최적을 찾아야 하며, 가끔은 해당옵티마이저가
최적이 아닐 수 있다.(요구사항 때문에)
따라서, 비용기반 옵티마이저를 100% 신뢰하지는 말것.

-- 실제 실행계획
예상/실제/활성 실행계획을 비교분석해야한다.

-- XML은 대부분 보고서를 만들때 빼내어 쓴다.

-- 비용은 보통 10~20미만으로 체크한다.

-- 스캔과 시크
스캔 : 처음부터 끝까지 가져온다
시크 : 정해진 범위

-- 쿼리 실행시 경고/오류가 나는 경우
SELECT FROM 쓸 때 인덱스 만들으라고하거나 성능이 안나오는경우
INSERT양이 많아 TIMEOUT이 나오는 경우

-- 쿼리프로세서
SQL서버 2017,2019는 메모

-- 예상행수 대비 실제 실행행수가 5%정도 차이나면 튜닝 대상이다
-> 인덱스를 바꿀지 채우기비율을 바꿀지 결정해야 한다.
-> 인덱스 속성에 가서 최대/최소 행크기, 조각화 비율도 확인 가능


-- 유지관리
인덱스 다시 구성 : 인덱스 페이지를 효율적으로 사용(조각모음) = DELETE가 많을 때
인덱스 다시 작성 : 채우기 비율을 새걸로 바꾼다 = INSERT가 많을 때
(인덱스 옵션의 조각화의 조각화에 문제가 있으면 다시 구성한다.