블로그 이미지
정홍주
Azure에 대한 내용뿐만 아니라 새로운 트렌드로 빅데이터, BI, SharePoint, 앱 등의 내용을 다룹니다.

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    

Notice

2012.03.23 08:30 Microsft Azure/SQL Databases


SQL Azure – AdventureWorks2012

 

SQL Azure의 버전이 업데이트된 것은 예전에 포스팅을 했었는데 Sample Database가 지난 2월에 이미 올라왔었습니다. Codeplex 사이트에서 확인이 가능합니다.

아래 링크를 참고하세요.

http://msftdbprodsamples.codeplex.com/releases/view/37304

 

저는 이미 데이터베이스를 배포했고 아래 그림은 로컬 PC SQL Server 2012에서 연결한 내용입니다.

 

SQL Server 2012의 모든 T-SQL 구문을 지원하는 것은 아닙니다만 SQL Azure에서도 SQL Server 2012의 기능을 많이 지원한다는 것을 알아보겠습니다.

이전 블로깅에서 에 대한 내용을 다루었는데 실행해서 결과를 알아보겠습니다.

아래 쿼리를 실행해보겠습니다.

SELECT ProductID, Name, ProductNumber, Color, Size FROM [Production].[Product]

 

ORDER BY ProductID DESC  

결과는 아래와 같습니다.

/*

504        Road-750 Black, 52           BK-R19B-52         Black     52

503        Road-750 Black, 48           BK-R19B-48         Black     48

502        Road-750 Black, 44           BK-R19B-44         Black     44

501        HL Bottom Bracket            BB-9108 NULL     NULL

500        ML Bottom Bracket           BB-8107 NULL     NULL

499        LL Bottom Bracket            BB-7421 NULL     NULL

498        Mountain-500 Black, 52     BK-M18B-52        Black     52

*/

 

아래 페이징 쿼리를 실행해보겠습니다.

SELECT ProductID, Name, ProductNumber, Color, Size FROM [Production].[Product]

 

ORDER BY ProductID DESC  

 

OFFSET 20 ROWS

 

    FETCH NEXT 10 ROWS ONLY;

 

결과는 아래와 같습니다.

 

간단히 SQL Azure의 샘플 데이터베이스 업데이트와 SQL Server 2012의 기능을 지원한다는 것을 알아보았습니다.


신고
posted by 정홍주
2012.03.14 08:30 SQL

 

SQL Server 2012의 강화된 T-SQL : 페이징 - OffSet/Fetch

 

개발자들이 리스트나 게시판에 대해서 페이징 하는 것은 기본적인 작업입니다.

물론 여러 가지 방법이 있습니다. TOP 구문과 WHERE 절을 통해서 하거나 ROW_NUMBER를 통해서 처리하거나 별도 쿼리를 통해서 하거나 기존 소스를 한번 살펴보면 여러 방법을 쓰고 있다는 것을 알 수 있습니다. 

SQL Server 2012에서는 Offset/Fetch 구문을 통해 효과적으로 페이징 쿼리를 작성할 수 있습니다. 일단 쿼리 구문이 간단해서 작업하기가 용이한 것 같습니다.

물론 저희 환경의 기존 데이터에 기존 페이징 쿼리와 Offset/Fetch 쿼리에 대한 성능 비교를 해봐야 하겠지만 여기에서는 간단한 사용법을 알아보도록 하겠습니다. 

자 먼저 구문을 한번 실행해보도록 하겠습니다.

아래 구문은 AdventureWorks2012에 있는 Product 테이블을 SELECT 한 결과입니다.

--[AdventureWorks2012]

SELECT ProductID, Name, ProductNumber, Color, Size FROM [Production].[Product]

ORDER BY ProductID DESC  

 

 

간단한 페이징을 해보도록 하겠습니다. 위 결과의 1 페이지에 해당하는 결과만 보여주는 내용입니다. 직접 값을 지정했습니다.

SELECT ProductID, Name, ProductNumber, Color, Size FROM [Production].[Product]

ORDER BY ProductID DESC  

OFFSET 0 ROWS

    FETCH NEXT 10 ROWS ONLY;

 

2 페이지를 보고 싶다면 아래와 같이 구문이 변경됩니다.

SELECT ProductID, Name, ProductNumber, Color, Size FROM [Production].[Product]

ORDER BY ProductID DESC  

OFFSET 10 ROWS

    FETCH NEXT 10 ROWS ONLY; 

 

변수로 대체되는지를 확인하기 위해 저장 프로시저를 아래와 같이 생성했습니다.

CREATE PROC usp_GetProducts

@Page INT

AS

DECLARE @Fetch INT =10;

DECLARE @OffSet INT= (@Page-1)*@Fetch

 

SELECT ProductID, Name, ProductNumber, Color, Size FROM [Production].[Product]

ORDER BY ProductID DESC  

OFFSET @OffSet ROWS

    FETCH NEXT @Fetch ROWS ONLY;

GO

 

프로시저를 실행하면 아래와 같은 결과를 얻을 수 있습니다. 

서브 쿼리를 이용해서 할 수 도 있습니다. 아래 구문을 참고하세요~

SELECT ProductID, Name, ProductNumber, Color, Size FROM [Production].[Product]

ORDER BY ProductID DESC  

OFFSET 10 ROWS

    FETCH NEXT (SELECT PageSize FROM [dbo].[AppSettings])  ROWS ONLY;

GO

 

 기존에 쓰던 쿼리가 없어 실행계획을 비교하기는 뭐하네요~ 

온라인 설명서에서 Offset/Fetch에 대한 내용은 아래 링크를 참조하십시오.

http://msdn.microsoft.com/ko-kr/library/ms188385(v=sql.110).aspx#Offset

  

Offset Fetch에 대한 제한 사항

l  외부 쿼리와 상관 관계를 만들 수 없습니다.

l  OVER 절은 OFFSET FETCH를 지원하지 않습니다.

l  OFFSET FETCH INSERT, UPDATE, MERGE DELETE 문에서 직접 지정할 수 없지만 이러한 문에 정의된 하위 쿼리에서는 지정할 수 있습니다

l  UNION, EXCEPT 또는 INTERSECT 연산자를 사용하는 쿼리에서는 쿼리 결과의 순서를 지정하는 마지막 쿼리에서만 OFFSET FETCH를 지정할 수 있습니다.

l  같은 쿼리 식(같은 쿼리 범위)에서 TOP OFFSET FETCH와 결합할 수 없습니다.

 

안정된 최적화를 위해서는 아래 조건을 만족해야 합니다.

l  쿼리에 사용되는 기본 데이터가 변경되지 않아야 합니다., 쿼리와 연결된 행이 업데이트되지 않거나 페이지에 대한 모든 쿼리 요청이 스냅숏 또는 직렬화 가능 트랜잭션 격리를 사용하여 단일 트랜잭션에서 실행되어야 합니다.
(
위 온라인 설명서의 단일 트랜잭션에서 여러 쿼리 실행쿼리 예를 참고하십시오.)

l  ORDER BY 절이 고유한 열 또는 열의 조합을 포함해야 합니다.


신고

'SQL' 카테고리의 다른 글

SQL Server 2012 T-SQL: CHOOSE, IIF 논리함수  (0) 2012.03.28
SQL Server 2012의 강화된 T-SQL: 시퀀스(Sequence)  (0) 2012.03.21
SQL Server 2012의 강화된 T-SQL : 페이징 - OffSet/Fetch  (0) 2012.03.14
SQL Server 2012 RTM  (0) 2012.03.07
Hadoop  (0) 2012.02.13
Big Data  (0) 2012.01.19
posted by 정홍주
2011.09.12 08:30 SharePoint/SharePoint 2010

SPLINQ 를 통한 페이징

 

예전 글에서 SPQuery 통한 페이징에 대해서 다루어 보았습니다. 그리고 LINQ to SharePoint 에 대한 내용도 다루어 보았습니다. 앞부분에서 누락되어 정리해둡니다.

SPLINQ 를 통해서 페이징이 가능합니다. 원래 LINQ에 있는 기능일 뿐입니다. 아래에서 간단히 코드를 통해서 살펴보도록 하겠습니다.

간단히 Title 0에서 Tile 49까지 추가되어 있습니다.

 

SPMetal 을 이용해서 엔티티 클래스를 생성하고 프로젝트에 엔티티 클래스 파일을 추가했습니다.

자 그럼 1 페이지 코드를 살펴보도록 하겠습니다.

 

SPLINQ의 쿼리에서 Skip, Take를 사용하고 있습니다. 결과는 다음과 같습니다.

 

2 페이지의 경우는 int Page=2 라고 바꾸면 됩니다. 아래는 3 페이지의 결과입니다.

 

항목을 하나 더 추가하고 6 페이지로 가보도록 하겠습니다. 맨 마지막 항목 하나가 보입니다.

 

SPQuery의 경우보다 더 간단한 듯 합니다~

신고
posted by 정홍주
2011.07.25 08:30 SharePoint/SharePoint 2010

SPQuery 를 통한 페이징

요번 글에서는 페이징에 대한 내용을 다루어 보도록 하겠습니다. 커스터마이징을 통해 List의 데이터를 요구사항에 맞게 보여주게 됩니다. 그럴 경우 Server 개체 모델을 통해서는 SharePoint List의 데이터를 SPQuery 클래스를 이용해 CAML를 통해 쿼리, 정렬, 필터를 처리할수 있습니다.

그런데 트러블슈팅하러 업체에 가서 코드를 보니 전체를 들고 와서 처리하고 있어 간단히 정리해봅니다.

SPListItemCollectionPosition 클래스를 통해 페이징 처리하는 코드의 예를 한번 살펴보도록 하겠습니다. 먼저 아래와 같은 간단한 사용자 지정 목록에 데이터를 50건 입력했습니다. Ref 는 정렬을 하기 위한 내용으로 0~49까지의 값을 가지고 있습니다.

 

 

SharePoint OM에서 SPQuery를 통해 RowLimit, Query(Where, OrderBy)를 처리해서 1페이지에 대한 내용을 출력해줄 수 있습니다.

아래 코드의 내용을 보면 10건으로 제한하고 Ref Descending으로 정렬해서 화면에 출력해줍니다. 1 페이지의 경우 아래와 같이 처리하고 2 페이지부터는 페이징이 되도록 처리합니다.


1 페이지에 대한 결과는 아래와 같습니다.

 

2페이지에 대한 내용은 아래와 같이 처리할 수 있습니다. Lastitem은 직접 입력해서 처리했습니다.


SPListItemCollectionPosition 의 생성자의 매개변수(PageInfo)는 다양한 옵션들(Paged, p_정렬키, Next, Prev) 이 있으며 위의 코드에서는 아래와 같은 내용이 처리됩니다.

Paged=TRUE&p_Ref=40&p_ID=41

결과는 아래와 같습니다.

 
3페이지의 경우는 lastitem 30으로 해서 실행해보면 됩니다.

 

물론 페이지 사이즈를 5로 지정해서 테스트할 수도 있습니다.

위의 코드를 기반으로 SPQuery에서 모두 들고 와서 해당 페이지에 대한 내용을 표시해주는 경우 SPListItemCollectionPosition 을 통해 해당 페이지에 대한 내용만 가져와서 표시해 줄 수 있습니다. 실제 SQL 쿼리에서도 SELECT TOP(@NUMROWS)가 처리됩니다.

 

Client OM에서도 동일한 클래스(SPListItemCollectionPosition) 를 볼 수 있으며 REST 에서도 페이징에 대한 내용을 지원해주고 있습니다.

신고
posted by 정홍주
prev 1 next

티스토리 툴바