본문 바로가기
MS-SQL

by 캡틴노랑이 2015. 7. 29.
반응형

프로파일러를 사용해서 확인해 보았을 때 결과 창에서 Reads, CPU의 사용률이 작은데도 Duration이 크게 나오면 블로킹인 경우가 많다.  

즉, CPU를 별로 사용하지도 않았는데 처리가 오래되었기 때문이다. 또한, Reads와 Duration이 모두 크다면 인덱스를 사용하지 않는 경우가 대부분이다. 

 

 

SQL Server 구문 분석및 컴파일 시간
set statistics time on

현재 메모리(프로시저 캐시 영역)으 내용을 모두 지움.
DBCC FREEPROCCACHE

 

 

sp_로 시작하는 프로시져

sp의 약자는  System Procedure의 약자로 해당 DB에 저장되는 것이 아니라 전역에 저장되어 해당 인스턴스의 모든 DB에서 사용가능하다.

 

SET NOCOUNT ON

실행 컬럼수를 반환한다.

sp 실행시 결과를 반환과 동시에 다시 한번 DB에서 실행 컬럼수를 반환하기 때문에 트래픽이 증가 될 수 있다.

 

COUNT(컬럼명), COUNT(*)의 차이

COUNT(컬럼명)은 해당 컬럼에 NULL이 있을 경우, 해당 컬럼은 포함하지 않는다.

 

@@rowcount

인서트 후 반영된 행의 수를 확인 할 때는 count(*)보다 @@rowcount을 사용.

 

임시테이블, 테이블 변수, CTE

 임시테이블

 디스크 저장

재컴파일함 

 

 테이블변수

 메모리 저장

재컴파일이 임시보다 적음

 

 CTE

 메모리 저장

재컴파일이없음.

 

 

 

테이블에 어떤 조건에 해당되는 행이 존재 하는지 확인 할 때

COUNT(*)와 IF EXISTS의 차이점

COUNT(*)은 테이블 전체를 조회하지만.

IF EXISTS는 해당 조건이 만족하면, 검색을 중단한다.

 

NULL 체크

NULL체크시 =나 <> 가 아닌 ISNULL, IS NOT NULL을 사용한다.

잘못된 결과를 반환하는 경우가 있다.

 

WHERE 조건 사용시

많이 걸러질 수 있는 조건을 상위에 둔다.

 

테이블 데이터 통으로 삭제시

로그를 남길 필요가 없다면, DELETE보다 TRUNCATE TABLE로 삭제한다.

왜냐면, DELETE는 로그 기록을 남기지만, TRUNCATE TABLE은 로그를 남기지 않는다.

반응형

'MS-SQL' 카테고리의 다른 글

DATEADD -일정 수 만큼 날짜 더하기  (0) 2015.07.29
트랜잭션 격리 수준(SQL Server 2008, 트랜잭션과 잠금)  (0) 2015.07.29
사용자 정의 함수(Function)  (0) 2015.07.29
유용한 쿼리  (0) 2015.07.28
stuff함수  (0) 2015.07.28

댓글