블로그 이미지
bedbmsguru

Notice

Recent Comment

Recent Trackback

Archive

calendar

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
  • 28,005total
  • 6today
  • 6yesterday
2010.11.03 11:24 SQL SERVER

실행계획이 다시 컴파일 되는 경우

쿼리가 참조하는 테이블의 스키마가 변경되는 경우
쿼리가 참조하는 인덱스가 변경되거나 없어지는 경우
쿼리가 참조하는 통계정보가 업데이트 되는경우
sp_recompile 메소드가 호출되는 경우
트리거가 있는 테이블에 상당한 양의 insert나 delete가 호출되는 경우
하나릐 쿼리에 DDL과 DML이 같이 포함되어 있는 경우
쿼리에서 set 옵션을 변경하는경우
클라인트쪽 커서를 사용하고 있는데 FOR BROWSE 옵션이 변경되었을때 (이게 먼말이여.ㅡ.ㅡ)
쿼리에서 커서 옵션을 변경하였을 경우


--Plan Cache 날리는법

DBCC FREEPROCCACHE

저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
SQL 실행계획이 다시 컴파일 되는 경우  (0) 2010.11.03
SQL2005 랭킹 함수  (0) 2010.11.03
Drived Table과 CTE(Common Table Express)비교  (0) 2010.11.03
SQL SERVER TIP  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 00:15 SQL SERVER
1. ROW_NUMBER()
SELECT rank() OVER(ORDER BY 칼럼) FROM 테이블
순차적으로 증가되는 값 각 row마다 unique 한 값을 가진다.

2. RANK(), DENSE_RANK()
SELECT rank() OVER([옵션] ORDER BY 칼럼) FROM 테이블
옵션에 partition by를 추가하면 칼럼별로 그룹핑된 순위를 보여준다.
rank()와 dense_rank()의 차이
1  1
2  2
2  2
2  2
5  3
6  4
7  5
.  .
.  .
.  .

3. NTILE()
사용법:NTILE (integer_expression)    OVER ( [ <partition_by_clause> ] < order_by_clause > )

Ex) select col1 ntile(100) OVER ( ORDER BY col3) as myresult FROM T1
myresult 칼럼을 통해 100(integer_expression ) 으로 나눴을때 어느정도에 위치하는지 볼수 있음 (설명하기 어렵다.-_-a)

저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
SQL 실행계획이 다시 컴파일 되는 경우  (0) 2010.11.03
SQL2005 랭킹 함수  (0) 2010.11.03
Drived Table과 CTE(Common Table Express)비교  (0) 2010.11.03
SQL SERVER TIP  (0) 2010.11.03
posted by bedbmsguru
2010.11.03 00:12 SQL SERVER

Drived Tables
쿼리로 생성한 일종의 가상테이블 테이블처럼 From절 뒤에 오고 Drived table의 바깥에서만 사용가능하다.

결과에 Alias를 주고 싶을때.
SELECT OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts
FROM (SELECT YEAR(OrderDate) AS OrderYear, CustomerID
FROM dbo.Orders) AS D
GROUP BY OrderYear; <--Group by가 Select 리스트 보다 먼저 실행되기 때문에 alias를 주려면 Derived Table을 사용해야함


1:중첩가능 drived table안에 중첩된 Drived Table을 사용가능하다.
2:여러번 참조하고 싶을때는 참조하고 싶을때마다 쿼리를 다시 만들어야 한다 즉 한번 작성된 Drived Table을 다시 이용하는

 것은 불가능하다.

CTE(Common Table Express)
Drived Table과 유사하지만 몇가지 장점이 있음
--------CTE형식------------
WITH cte_name
AS
(
cte_query
)
outer_query_referring to_cte_name;

CTE 는 중첩(nested)이 불가능 하지만 하나의 with문 안에서 multiple CTE가 가능하다.
WITH C1 AS
(
SELECT YEAR(OrderDate) AS OrderYear, CustomerID
FROM dbo.Orders
),
C2 AS
(
SELECT OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts
FROM C1
GROUP BY OrderYear
)
SELECT OrderYear, NumCusts
FROM C2
WHERE NumCusts > 70;
-------------------------------------------------------------
※CTE는Drived Table 과 달리  한번 만들어둔 CTE를 여러번 참조가 가능하다.


 


저작자 표시
신고

'SQL SERVER' 카테고리의 다른 글

좋은 stored procedure 작성법  (0) 2010.11.03
SQL SERVER 트리거  (0) 2010.11.03
SQL 실행계획이 다시 컴파일 되는 경우  (0) 2010.11.03
SQL2005 랭킹 함수  (0) 2010.11.03
Drived Table과 CTE(Common Table Express)비교  (0) 2010.11.03
SQL SERVER TIP  (0) 2010.11.03
posted by bedbmsguru

티스토리 툴바