2013-09-24 3 views
1

약 1.5 초가 걸린 쿼리입니다. 이걸 내릴 수 있을까요?이 쿼리의 속도가 향상됩니다.

SELECT * 
FROM 
    (SELECT 
     ROW_NUMBER() OVER (ORDER BY NAME asc) peta_rn, 
     peta_query.* 
    FROM 
     (SELECT 
       BOOK, PAGETRIMMED, NAME, TYPE, PDF 
     FROM 
       CCWiseDocumentNames2 cdn 
     INNER JOIN 
       CCWiseInstr2 cwi ON cwi.ID = cdn.ID) as peta_query) peta_paged 
WHERE 
    peta_rn > 1331900 AND peta_rn <= 1331950 

These 내 테이블 structures are : 보시

enter image description here

그것을 97% 예를 들어, 클러스터링 된 인덱스가 추구되어 및 3% 인덱스 :

CREATE TABLE [dbo].[CCWiseDocumentNames2](
    [ID] [int] NULL, 
    [BK_PG] [varchar](50) NULL, 
    [NAME] [varchar](100) NULL, 
    [OTHERNAM] [varchar](100) NULL, 
    [TYPE] [varchar](50) NULL, 
    [INDEXNAME] [varchar](50) NULL 
) ON [PRIMARY] 

CREATE TABLE [dbo].[CCWiseInstr2](
    [ID] [int] NULL, 
    [BK_PG] [varchar](50) NULL, 
    [DATE] [datetime] NULL, 
    [ITYPE] [varchar](50) NULL, 
    [BOOK] [int] NULL, 
    [PAGE] [varchar](50) NULL, 
    [NOBP] [varchar](50) NULL, 
    [DESC] [varchar](240) NULL, 
    [TIF] [varchar](50) NULL, 
    [INDEXNAME] [varchar](50) NULL, 
    [CONFIRM] [varchar](50) NULL, 
    [PDF] [varchar](50) NULL, 
    [PAGETRIMMED] [varchar](10) NULL, 
    [PageINT] [int] NULL, 
    [PageCHAR] [varchar](2) NULL, 
    [IdAuto] [int] NOT NULL 
) ON [PRIMARY] 

이 내 execution plan입니다 주사. 이 쿼리를 더 향상시킬 수있는 방법은 무엇입니까?

+0

색인을 올바르게 찾으십니까? 당신이 피하고자하는 스캔. –

+0

그러나 스캔은 단지 3 %입니다. 이 쿼리를 더 향상시킬 방법이 없다는 것을 의미합니까? –

+0

인덱스가있는 것 같습니다. 인덱스가있는 열은 무엇입니까? –

답변

4

즉석에서 rownumber를 100 만 개가 넘는 행에 추가 할 수없고 where 절이 새로 생성 된 rownumber를 사용하여 즉시 해당 행을 인식 할 것으로 기대합니다.

0

난 단지 당신의 고려 사항에 대한 몇 가지 옵션을 제공 할 수있는 데이터의 양을 가지고 있지 않기 때문에 :

이 (ID 이외의) 이름 열에 대한 클러스터 된 인덱스를 전용으로 사용을 당신이 이름에 ROW_NUMBER 얻을 후 가입 확인 . CCWiseInstr2의 세 열을 ID 열의 비 클러스터형 인덱스에 포함시킵니다. 이렇게하면 하드 디스크 스핀들의 움직임을 줄일 수 있습니다. Perfomance 이득은 많은 양의 데이터에서만 관찰 될 수 있습니다.

CREATE NONCLUSTERED INDEX [idx2_ID_include] ON [dbo].[CCWiseInstr2] ([ID] ASC) INCLUDE ([BOOK], [PDF], [PAGETRIMMED]) 
GO 

With a as (
    Select * 
    from ( SELECT ROW_NUMBER() OVER (ORDER BY NAME asc) as peta_rn, ID, 
        type 
      from CCWiseDocumentNames2) as Temp 
      where peta_rn > 1331900 AND peta_rn <= 1331950 
) 
select a.peta_rn, 
     a.type, 
     b.book, 
     b.PAGETRIMMED, 
     b.PDF 
from a 
join CCWiseInstr2 as b on a.id = b.id 
관련 문제