2013-09-24 62 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 

這是我的表結構:

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] 

這是我的執行計劃:

enter image description here

正如你可以看到它是97%聚集索引查找和3%指數掃描。任何方式來進一步改善這個查詢?

+0

指數好權求?它是您想要避免的掃描。 –

+0

但掃描僅爲3%。你的意思是沒有辦法進一步改進這個查詢? –

+0

它似乎你有索引,你有索引的列是什麼? –

回答

4

你不能在飛行中添加ROWNUMBER超過一百萬行,並期望在where子句將立即認識到與新生成的rownumbers那些行。

0

因爲我沒有數據的量,只能爲您提供一些值得考慮的選項:

奉獻的名稱列(除ID之外)聚集索引 使您得到ROW_NUMBER過名後加入。 包括從CCWiseInstr2三列插入ID列中的非聚集的索引。這可以節省一些硬盤主軸的運動。性能增益只能在大量數據中觀察到。

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